Cette page détaille les différences de version entre les HAL de l'appareil photo, les API et les tests CTS (Compatibility Test Suite) associés. Il couvre également plusieurs modifications d'architecture 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 d'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 ou version antérieure, exposé via la classe
android.hardware.Camera
. - API Camera2
- Le framework de l'appareil photo au niveau de l'application sur les appareils Android 5.0 et versions ultérieures, exposé via le package
android.hardware.camera2
. - Camera HAL
- Couche de module de caméra 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 HAL de l'appareil photo publiée avec Android 4.4.
- Camera HAL3.2
- Version du HAL de l'appareil photo publiée avec Android 5.0.
- CTS de l'API Camera1
- Ensemble de tests CTS de l'appareil photo exécutés sur l'API Camera1.
- CTS de l'API Camera2
- Ensemble supplémentaire de tests CTS de l'appareil photo exécutés sur l'API Camera2.
- Aigus
- Sépare l'implémentation du fournisseur (logiciel de niveau inférieur spécifique à l'appareil écrit par des fabricants de puces) du framework de l'OS Android via une nouvelle interface de 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.
- VTS
- Suite de tests fournisseur introduite en même temps que Treble.
API de la caméra
Android inclut les API d'appareil photo suivantes.
API Camera1
Android 5.0 a abandonné 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. Cependant, la période d'abandon sera longue, et les versions Android continueront de prendre en charge les applications de l'API Camera 1 pendant un certain temps. Plus précisément, l'assistance continue pour:
- Interfaces de l'API 1 de l'appareil photo pour les applications Les applications d'appareil photo basées sur l'API 1 de l'appareil photo doivent fonctionner comme sur les appareils exécutant des versions d'Android antérieures.
- Versions du HAL de l'appareil photo. Inclut la prise en charge de la couche HAL de l'appareil photo 1.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 streaming/rafales efficaces sans copie et des commandes par frame de l'exposition, du gain, des gains de balance des blancs, de la conversion des couleurs, du dénoyage, de l'accentuation, etc. Pour en savoir plus, regardez la vidéo de présentation de Google I/O.
Android 5.0 et versions ultérieures incluent l'API Camera2. Toutefois, les appareils équipés d'Android 5.0 ou version ultérieure 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 code des anciens frameworks traduit conceptuellement les appels d'API Camera2 en appels d'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 Camera 2 (mais pas toutes) et doivent utiliser l'HAL de la caméra 3.2 ou version ultérieure.FULL
: ces appareils prennent en charge toutes les principales fonctionnalités de l'API Camera2 et doivent utiliser Camera HAL 3.2 ou version ultérieure, ainsi qu'Android 5.0 ou version ultérieure.LEVEL_3
: ces appareils acceptent le retraitement YUV et la capture d'images RAW, ainsi que 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 de l'API Camera2. Les appareils FULL
nécessitent les fonctionnalités MANUAL_SENSOR
et MANUAL_POST_PROCESSING
, entre autres. 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 aucun. Toutefois, la capacité BACKWARD_COMPATIBLE
doit toujours être définie.
Le niveau 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 de flags de fonctionnalités pour permettre à Google Play de filtrer les applications d'appareil photo de l'API Camera2.
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 concernant CTS
Les appareils équipés d'Android 5.0 ou version ultérieure doivent réussir les tests CTS de l'API 1 de la caméra, de l'API 2 de la caméra et du vérificateur CTS de la caméra.
Les appareils qui ne disposent pas d'une implémentation HAL3.2 d'appareil photo et qui ne sont pas compatibles avec l'ensemble des interfaces de l'API Camera2 doivent tout de 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 mappés conceptuellement aux appels de l'API Camera1). Par conséquent, tous les tests CTS de l'API Camera2 liés aux fonctionnalités ou aux fonctionnalités au-delà de l'API Camera1 sont automatiquement ignorés.
Sur les anciens appareils, les tests CTS de l'API Camera2 exécutés utilisent les interfaces et fonctionnalités publiques existantes de l'API Camera1, sans nouvelles exigences. Les bugs exposés (qui provoquent un échec 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 existantes de l'API Camera1. Nous ne nous attendons pas à recevoir beaucoup de bugs de cette nature (mais ils doivent être corrigés pour réussir les tests CTS de l'API Camera2).
Exigences concernant les VTS
Les appareils équipés d'Android 8.0 ou version ultérieure avec des implémentations HAL liées doivent réussir les tests VTS de la caméra.
Durcissement 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 de mediaserver. À partir d'Android 8.0, chaque HAL de l'appareil photo lié s'exécute dans un processus distinct du service de l'appareil photo. Les fournisseurs peuvent être amenés à modifier le HAL de l'appareil photo en fonction des versions de l'API et du HAL utilisées. Les sections suivantes détaillent les modifications architecturales apportées dans AP1 et AP2 pour HAL1 et HAL3, ainsi que les exigences générales.
Changements d'architecture pour l'API1
L'enregistrement vidéo de l'API 1 peut supposer que la caméra et l'encodeur vidéo sont en direct dans le même processus. Lorsque vous utilisez l'API1 sur:
- HAL3, où le service d'appareil photo utilise BufferQueue pour transmettre des tampons entre les processus, aucune mise à jour du fournisseur n'est nécessaire.
- HAL1, qui permet de transmettre des métadonnées dans des tampons vidéo, les fournisseurs doivent mettre à jour le HAL pour utiliser
kMetadataBufferTypeNativeHandleSource
. (kMetadataBufferTypeCameraSource
n'est plus compatible avec Android 7.0.)
Modifications architecturales pour l'API2
Pour l'API 2 sur HAL1 ou HAL3, BufferQueue transmet des tampons pour que ces chemins continuent de fonctionner. Architecture Android 7.0 pour l'API 2 sur:
- HAL1 n'est pas affecté par le transfert 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:
Exigences supplémentaires
Les modifications architecturales apportées pour renforcer la sécurité du framework multimédia et de la caméra incluent les exigences d'appareil supplémentaires suivantes.
- 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 des caméras sensibles au temps, tels que l'enregistrement vidéo à grande vitesse. Les fournisseurs peuvent mesurer l'impact réel en exécutant
android.hardware.camera2.cts.PerformanceTest
et l'application Google Caméra pour l'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. - Transmettre des 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 d'appareil photo et multimédia peuvent transmettre les tampons vidéo entre les processus en sérialisant et désérilant correctement les poignées natives. - L'adresse de l'identifiant de tampon ne stocke pas toujours le même tampon (HAL3 uniquement). Pour chaque requête de capture, HAL3 obtient les adresses des poignées de tampon. HAL ne peut pas utiliser les adresses pour identifier les tampons, car les adresses peuvent stocker un autre handle de tampon une fois que HAL a renvoyé le tampon. Vous devez mettre à jour le HAL pour utiliser des poignées de tampon afin d'identifier les tampons. Par exemple, le HAL reçoit une adresse de poignée de tampon A, qui stocke la poignée de tampon A. Une fois que HAL a renvoyé le handle de tampon A, l'adresse A du handle de tampon peut stocker le handle de tampon B la prochaine fois que le HAL le reçoit.
- Mise à jour des règles SELinux pour cameraserver. Si des règles SELinux spécifiques à l'appareil autorisent le serveur multimédia à exécuter l'appareil photo, vous devez mettre à jour les règles SELinux afin d'accorder les autorisations appropriées au serveur de caméra. Nous déconseillons de répliquer les règles SELinux du mediaserver pour le cameraserver (car le mediaserver et le cameraserver 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. Toutes les autorisations inutiles liées à l'appareil photo dans le serveur multimédia doivent être supprimées.
- Séparation entre le HAL de la caméra et le serveur de caméra. Android 8.0 et versions ultérieures séparent également le HAL de l'appareil photo lié 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'un appareil photo et équipés d'Android 7.0, vérifiez l'implémentation en exécutant Android 7.0 CTS. Bien qu'Android 7.0 n'inclue pas de nouveaux tests CTS qui vérifient les modifications du 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'un appareil photo et équipés d'Android 8.0 ou version ultérieure, vérifiez l'implémentation du fournisseur en exécutant VTS.
Historique des versions de Camera HAL
Pour obtenir la liste des tests disponibles pour évaluer le HAL de la caméra Android, consultez la checklist de test du HAL de la caméra.
Android 10
Android 10 introduit les mises à jour suivantes.
API Camera
- Améliorations apportées à la 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 la page Compatibilité avec plusieurs caméras.
- Possibilité de vérifier si une configuration de session particulière est compatible sans la surcharge de performances liée à la création d'une 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
. - Compatibilité avec le format d'image JPEG de profondeur. Pour en savoir plus, consultez la Spécification de la profondeur dynamique.
- Prise en charge du format d'image HEIC. Consultez la section 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
. ConsultezgetKeysNeedingPermission
.
Caméra HAL
Les versions HAL de l'appareil photo suivantes sont mises à jour dans Android 10.
3,5
ICameraDevice
-
getPhysicalCameraCharacteristics
: informations statiques sur l'appareil photo pour un ID de caméra physique supporté par un appareil photo logique. Consultez la section 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 prise en charge. Consultez la section API pour interroger les combinaisons de flux.
ICameraDeviceSession
-
isReconfigurationNeeded
: méthode qui indique au framework de la caméra si une reconfiguration complète du flux est requise pour les nouvelles valeurs de paramètre de session possibles. Cela permet d'éviter les retards de reconfiguration inutiles de la caméra. Consultez la section Requête de reconfiguration de session. - API de gestion des tampons HAL: ces API permettent au HAL de l'appareil photo de ne demander des tampons au framework de l'appareil photo que lorsque cela est nécessaire, au lieu de coupler chaque requête 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 la caméra 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 appelé par le HAL de la caméra pour demander des tampons au serveur de la caméra. ConsultezrequestStreamBuffers
. -
returnStreamBuffers
: rappel synchrone pour le HAL de la caméra afin de renvoyer des tampons de sortie au serveur de la caméra. ConsultezreturnStreamBuffers
.
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 de module photo suivantes sont mises à jour dans Android 10.
2.5
- Ajoute la méthode
notifyDeviceStateChange
pour que les appareils puissent avertir le HAL de la caméra 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 indiquer
true
pourisTorchModeSupported
.
Android 9
La version Android 9 introduit les mises à jour suivantes de l'API2 de l'appareil photo et de l'interface HAL.
API Camera
- Introduction de l'API multicaméra pour une meilleure compatibilité avec les appareils équipés de plusieurs caméras orientées dans la même direction, ce qui permet d'utiliser des fonctionnalités telles que le bokeh et le zoom fluide. Cela permet aux applications d'afficher plusieurs caméras sur un appareil en tant qu'unité logique (caméra logique). Les requêtes de capture peuvent également être envoyées à des appareils photo individuels inclus dans une caméra logique. Consultez la section 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 des retards de traitement importants 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 la section 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. Consultez
STATISTICS_OIS_SAMPLES
. - Ajout de la compatibilité avec le flash externe. Voir
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
pour plus d'informations. - Ajoute un intent de suivi du mouvement dans
CAPTURE_INTENT
. ConsultezCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - Abandon de
LENS_RADIAL_DISTORTION
et ajout deLENS_DISTORTION
à la place. - Ajoute des modes de correction de la distorsion dans
CaptureRequest
. ConsultezDISTORTION_CORRECTION_MODE
. - Ajout de la compatibilité avec les caméras USB/UVC externes sur les appareils compatibles. Consultez
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Camera HAL
3.4
Mises à jour de ICameraDeviceSession
-
configureStreams_3_4
: permet de prendre en chargesessionParameters
et les appareils photo logiques. -
processCaptureRequest_3_4
: permet d'inclure des ID de caméra physique dans la structure du flux.
Mises à jour de ICameraDeviceCallback
-
processCaptureResult_3_4
: ajoute des métadonnées physiques de l'appareil photo dans les résultats de capture.
3.3
Les clés suivantes sont ajoutées aux métadonnées de l'appareil photo sous 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 du HAL de l'appareil photo du fournisseur doivent être liées. Android 8.0 contient également les principales améliorations suivantes apportées au service Appareil photo:
- Surfaces partagées: activez plusieurs surfaces partageant le même
OutputConfiguration
- API système pour les modes d'appareil photo personnalisés
onCaptureQueueEmpty
Pour en savoir plus sur ces fonctionnalités, consultez les sections ci-dessous.
Surfaces partagées
Cette fonctionnalité n'autorise qu'un seul ensemble de tampons à 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 HAL pour appareil photo et Gralloc peuvent créer des tampons Gralloc utilisés par plusieurs consommateurs différents (tels que le compositeur du matériel/GPU et l'encodeur vidéo), au lieu d'un seul consommateur. Le service de l'appareil photo transmet les indicateurs d'utilisation des consommateurs au HAL de l'appareil photo et au HAL gralloc. Ils doivent allouer les types de tampons appropriés, ou le HAL de l'appareil photo doit renvoyer une erreur indiquant que cette combinaison de consommateurs n'est pas prise en charge.
Pour en savoir plus, consultez la documentation destinée aux développeurs
enableSurfaceSharing
.
API système pour les modes d'appareil photo personnalisés
L'API publique de l'appareil photo définit deux modes de fonctionnement: l'enregistrement normal et l'enregistrement haute vitesse contraint. Ils ont une sémantique assez différente. Par exemple, le mode haute vitesse est limité à deux sorties spécifiques au maximum à la fois. Plusieurs OEM ont exprimé leur intérêt à définir 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 à la valeur entière 0x8000 pour éviter les conflits 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 à demander à leur application d'appareil photo personnalisée d'utiliser 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 changements de commande tels que le zoom en laissant la file d'attente des requêtes aussi vide que possible. onCaptureQueueEmpty
ne nécessite aucune opération HAL. Il s'agit d'un ajout purement côté framework. Les applications qui souhaitent en profiter doivent ajouter un écouteur à ce rappel et y répondre de manière appropriée. Généralement, cela consiste à envoyer une autre requête de capture à l'appareil photo.
Interface HIDL de la caméra
L'interface HIDL de la caméra est une refonte complète de l'interface HAL de la caméra qui utilise des API stables définies par HIDL. Toutes les fonctionnalités et capacités de l'appareil photo introduites dans les versions précédentes les plus récentes, 3.4 et 2.4 (pour le module de l'appareil photo), font également partie des définitions HIDL.
3.4
Ajouts mineurs aux métadonnées compatibles et modifications de la prise en charge de data_space:
- Ajoutez les métadonnées statiques
ANDROID_SENSOR_OPAQUE_RAW_SIZE
comme obligatoires si le formatRAW_OPAQUE
est compatible. - Ajoutez les métadonnées statiques
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
comme obligatoires si un format RAW est accepté. - Remplacez le champ
camera3_stream_t data_space
par une définition plus flexible, à l'aide de la définition version 0 de l'encodage de l'espace de données. - Ajouts de métadonnées généraux 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 à fonctionnalités étendues:
- Mises à jour de l'API OPAQUE et de la re-métadate de 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 du HAL avec les fonctionnalités étendues:
- Abandon de
get_metadata_vendor_tag_ops
. Utilisez plutôtget_vendor_tag_ops
danscamera_common.h
. - Abandon de
register_stream_buffers
. Tous les tampons Gralloc fournis par le framework à 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. - Ajouter 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.
- Modifier 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 du HAL à fonctionnalités étendues:
configure_streams
transmet les indicateurs d'utilisation des consommateurs au HAL.- Appel de vidage pour supprimer toutes les requêtes/tampons en cours aussi rapidement que possible.
3,0
Première révision du HAL à capacités étendues:
- Changement de version majeure, car l'ABI est complètement différent. Aucune modification des fonctionnalités matérielles requises ni du 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: les appels de framework dans HAL avec la requête suivante et les tampons de flux 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.
- Les déclencheurs ont été déplacés vers les requêtes et la plupart des notifications vers 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 la gestion des flux.
Les flux bidirectionnels remplacent la construction
STREAM_FROM_STREAM
. - Sémantique en mode limité pour les appareils plus anciens ou limités
2.0
Version initiale du HAL aux fonctionnalités étendues (Android 4.2) [camera2.h]:
- Suffisante pour implémenter l'API
android.hardware.Camera
existante. - Permet la file d'attente ZSL dans la couche de service de l'appareil photo.
- Aucune nouvelle fonctionnalité n'a été testée, comme le contrôle manuel de la capture, la capture RAW Bayer, le retraitement des données RAW, etc.
1.0
HAL de la caméra Android initiale (Android 4.0) [camera.h]:
- Convertie à partir de la couche d'abstraction CameraHardwareInterface C++.
- Compatible avec l'API
android.hardware.Camera
.
Historique des versions du module de caméras
Cette section contient des informations de gestion des versions pour le module matériel de la caméra, 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éra ajoute les modifications suivantes à l'API:
- Compatibilité avec le mode lampe de poche. Le framework peut activer le mode lampe de poche pour tout appareil photo doté d'un flash, sans ouvrir l'appareil photo. L'appareil photo a une priorité d'accès au flash plus élevée que le module de l'appareil photo. L'ouverture d'un appareil photo éteint la lampe de poche si elle a été activée via l'interface du module. En cas de conflit de ressources, par exemple si
open()
est appelé pour ouvrir un appareil photo, le module HAL de l'appareil photo doit avertir le framework via le rappel d'état du mode lampe de poche que le mode lampe de poche a été désactivé. - Compatibilité avec les appareils photo externes (par exemple, les appareils photo USB en mode "plug and play"). Les mises à jour de l'API spécifient que les informations statiques de la caméra ne sont disponibles que lorsque la caméra est connectée et prête à l'emploi pour les caméras externes en prise chaude. Les appels permettant d'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 ne compte que sur les rappels de modification de l'état de l'appareil pour gérer la liste des caméras externes disponibles. - Conseils d'arbitrage de la caméra. Ajout de la possibilité d'indiquer explicitement le nombre d'appareils photo pouvant être ouverts et utilisés simultanément. Pour spécifier des combinaisons d'appareils valides, 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 la caméra après le chargement du module HAL pour permettre une initialisation unique du HAL. Elle est appelée avant toute autre méthode de module.
2.3
Cette version du module d'appareil photo est désormais compatible avec les anciens appareils HAL.
Le framework peut l'utiliser pour ouvrir l'appareil photo en tant qu'appareil HAL de version HAL d'appareil inférieure si un même appareil est compatible avec plusieurs versions de l'API d'appareil.
L'appel d'ouverture du module matériel standard (common.methods->open
) continue d'ouvrir l'appareil photo avec la dernière version compatible, qui est également la version listée dans camera_info_t.device_version
.
2,2
Cette version du module de caméra ajoute la prise en charge de la balise du fournisseur à partir du module et abandonne l'ancienne vendor_tag_query_ops
qui n'était auparavant accessible qu'avec un appareil ouvert.
3,4
Cette version du module de caméra prend en charge les rappels asynchrones dans le framework à partir du module HAL de la caméra, qui permet d'informer le framework des modifications apportées à l'état du module de la caméra. 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éra qui signalent ce numéro de version implémentent la deuxième version de l'interface HAL du module de caméra. Les appareils photo pouvant être ouverts via ce module peuvent être compatibles avec la version 1.0 ou la version 2.0 de l'interface HAL de l'appareil photo. 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 version ultérieure.
1.0
Les modules d'appareil photo qui signalent ces numéros de version implémentent l'interface HAL du module d'appareil photo initial. Tous les appareils photo qui peuvent être ouverts via ce module ne sont compatibles qu'avec la version 1 du 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.