Android inclut des fonctionnalités permettant aux clients de caméra de choisir des flux de caméra optimaux pour des cas d'utilisation spécifiques et de s'assurer que certaines combinaisons de flux sont compatibles avec l'appareil photo. Une configuration de flux fait référence à un seul flux de caméra configuré dans l'appareil photo, tandis qu'une combinaison de flux fait référence à un ou plusieurs ensembles de flux configurés dans l'appareil photo. Pour en savoir plus sur ces fonctionnalités, consultez les configurations de flux recommandées et l'API permettant d'interroger des combinaisons de fonctionnalités.
Implémentation de référence
Il existe une implémentation de référence côté fournisseur des flux de configuration recommandés et de l'API pour interroger les fonctionnalités de combinaison de flux. Vous trouverez cette implémentation dans QCamera3HWI.cpp.
Configurations de flux recommandées
Les fournisseurs d'appareils photo peuvent annoncer aux clients des configurations de flux recommandées pour des cas d'utilisation spécifiques. Ces configurations de flux recommandées, qui sont des sous-ensembles de StreamConfigurationMap, peuvent aider les clients de caméra à choisir des configurations optimales.
Bien que StreamConfigurationMap fournisse des informations exhaustives sur la configuration des flux aux clients de l'appareil photo, il ne fournit aucune information sur l'impact de l'efficacité, de la puissance ou des performances du choix d'un flux par rapport à un autre. Les clients de la caméra peuvent choisir librement parmi toutes les configurations de flux possibles, mais dans de nombreux cas, cela conduit les clients à utiliser des configurations de caméras et des applications non optimales, ce qui entraîne des recherches exhaustives fastidieuses.
Par exemple, bien que certains formats YUV traités soient obligatoires et doivent être compatibles, il est possible que l'appareil photo ne soit pas compatible avec ces formats en mode natif. Cela entraîne une étape de traitement supplémentaire pour la conversion de format et réduit l'efficacité. La taille et le format correspondant peuvent également avoir un impact similaire, ce qui rend certaines dimensions préférables en termes de puissance et de performances.
Vos mappages de configuration de flux recommandés ne doivent pas être exhaustifs par rapport à StreamConfigurationMap. Les mappages de configuration suggérés doivent respecter les exigences de la section implémentation et peuvent inclure tous les formats, tailles ou autres valeurs disponibles dans StreamConfigurationMap. Les formats, tailles ou autres valeurs masquées qui ne figurent pas dans StreamConfigurationMap ne peuvent pas être inclus dans les cartes de configuration de flux recommandées.
Tous les tests restent inchangés et ne sont pas assouplis en fonction des configurations de flux recommandées.
Les configurations de flux recommandées fournies par l'implémentation de la caméra sont facultatives et le client de la caméra peut les ignorer.
Implémentation
Pour implémenter cette fonctionnalité, procédez comme suit.
Entrées de métadonnées
Pour activer cette fonctionnalité, le HAL de la caméra doit renseigner les entrées de métadonnées statiques suivantes:
android.scaler.availableRecommendedStreamConfigurations
: sous-ensemble recommandé de configurations de flux pour des cas d'utilisation spécifiques. La déclaration utilise des bitmaps indiquant les cas d'utilisation suggérés sous la forme de[1 << PREVIEW | 1 << RECORD..]
. Les cas d'utilisation étendent le tuple régulier (format, largeur, hauteur, entrée) d'une entrée supplémentaire. Les cas d'utilisation publics inexistants ou tout autre bit défini dans la plage[PUBLIC_END, VENDOR_START]
sont interdits.Ces informations sont stockées dans la balise de métadonnées
availableRecommendedStreamConfigurations
.L'exemple suivant montre un tableau pour une configuration de flux recommandée pour un appareil photo compatible uniquement avec les résolutions 4K et 1080p, où les deux résolutions sont préférées pour l'enregistrement vidéo, mais que seule la résolution 1080p est suggérée pour l'aperçu.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(disponible uniquement si l'appareil est compatible): configurations de flux de l'espace de données de profondeur recommandées pour cet appareil photo. Comme pour l'entrée de métadonnées ci-dessus, un bitmap de cas d'utilisation supplémentaire indique les cas d'utilisation suggérés.Ces informations sont stockées dans la balise de métadonnées
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(disponible uniquement si l'appareil est compatible): mise en correspondance des formats d'image recommandés suggérés pour cet appareil photo pour les flux d'entrée avec leurs formats de sortie correspondants.Ces informations sont stockées dans la balise de métadonnées
availableRecommendedDepthStreamConfigurations
.
Ces informations sont disponibles pour les clients de caméra via l'API RecommendedStreamConfigurationMap.
Cas d'utilisation requis
Les configurations de flux recommandées doivent être fournies pour les cas d'utilisation suivants et répondre aux exigences correspondantes:
Cas d'utilisation | Exigence |
---|---|
PREVIEW |
Un aperçu ne doit inclure que des configurations de flux traitées sans blocage avec des formats de sortie tels que YUV_420_888 et IMPLEMENTATION_DEFINED . |
RECORD |
Un enregistrement vidéo doit inclure des configurations de flux correspondant aux profils de médias compatibles annoncés avec le format IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
Un instantané vidéo doit inclure des configurations de flux au moins aussi grandes que les résolutions RECORD maximales et uniquement avec la combinaison de format/espace de données BLOB + DATASPACE_JFIF (JPEG). Les configurations ne doivent pas entraîner de glitchs de prévisualisation et doivent pouvoir s'exécuter à 30 FPS. |
SNAPSHOT |
Les configurations de flux d'instantanés doivent inclure au moins une configuration d'une taille proche de android.sensor.info.activeArraySize avec la combinaison de format/espace de données BLOB + DATASPACE_JFIF (JPEG). En tenant compte des restrictions concernant le format, l'alignement et d'autres restrictions spécifiques au fournisseur, la zone de la taille suggérée maximale ne doit pas être inférieure à 97% de la zone de la taille de la matrice de capteurs. |
ZSL (si compatible) |
Si l'appareil photo est compatible, les configurations de flux d'entrée recommandées ne doivent être annoncées qu'avec d'autres formats de sortie traités ou bloqués. |
RAW (si compatible) |
Si l'appareil photo est compatible, les configurations de flux brut recommandées ne doivent inclure que des formats de sortie basés sur le format RAW. |
Autres cas d'utilisation
Vous pouvez fournir des flux de configuration recommandés supplémentaires pour les cas d'utilisation spécifiques à votre implémentation.
Validation
Pour tester votre implémentation des flux de configuration recommandés, exécutez les tests CTS et VTS suivants:
API permettant d'interroger des combinaisons de fonctionnalités
À partir d'Android 15, la plate-forme Android fournit une API pour interroger les combinaisons de fonctionnalités. Cette API permet aux clients de la caméra de vérifier si une combinaison de fonctionnalités spécifiée peut être prise en charge par l'appareil. Cette API est nécessaire, car l'API camera2 modélise différentes fonctionnalités telles que la 4K, les 60 FPS, la vidéo HDR, l'UltraHDR, le zoom ultra grand-angle et la stabilisation en tant que commandes orthogonales.
Conditions requises
Pour permettre à l'API de interroger les combinaisons de fonctionnalités, le HAL de l'appareil photo doit implémenter la version 3 de l'interface ICameraDevice
. Pour en savoir plus, consultez la section Implémentation.
Lorsque l'API est prise en charge, la stabilisation de l'aperçu doit être orthogonale aux autres fonctionnalités. Cela signifie que pour un appareil photo compatible avec la stabilisation de l'aperçu, la valeur renvoyée par isStreamCombinationWithSettingsSupported
pour une combinaison donnée doit être la même lorsque la stabilisation de l'aperçu est activée ou désactivée. Cela réduit l'espace de recherche pour les requêtes de combinaison de fonctionnalités.
De plus, pour la classe de performances multimédias 15, la caméra arrière principale doit prendre en charge la stabilisation d'aperçu avec un aperçu HLG10 10 bits pour les aperçus 1080p et 720p, ainsi que les fichiers JPEG de taille maximale. Pour en savoir plus sur ces exigences, consultez la section 2.2.7.2. Appareil photo de la CDD.
Implémentation
Pour permettre à l'API d'interroger des combinaisons de fonctionnalités, implémentez les API de requête de combinaison de fonctionnalités suivantes dans la version 3 de ICameraDevice
:
constructDefaultRequestSettings
: crée les paramètres par défaut pour un typeCaptureRequest
spécifié. Le HAL peut utiliser l'implémentationICameraDeviceSession::constructDefaultRequestSettings
.isStreamCombinationWithSettingsSupported
: vérifie la compatibilité de l'appareil avec une combinaison de flux de caméra spécifiée à l'aide de paramètres de session et de clésCaptureRequest
supplémentaires. Doit renvoyertrue
pour les combinaisons acceptées etfalse
pour les combinaisons de fonctionnalités non acceptées. Le HAL peut utiliser l'implémentationisStreamCombinationSupported
et ajouter la prise en charge pour vérifier les paramètresCaptureRequest
transmis danssessionParams
.getSessionCharacteristics
: prend une combinaison de flux compatible avec des paramètres de session et renvoie les caractéristiques spécifiques à la session.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: répertorie toutes les configurations de session couramment utilisées. Ces configurations sont validées par des tests de conformité.
Pour les versions antérieures à la version 3 de l'interface ICameraDevice
, le HAL doit implémenter la méthode isStreamCombinationSupported
.
Pour en savoir plus sur les combinaisons d'éléments géographiques interrogées par l'API, consultez la documentation sur sessionConfigurationQueryVersion
dans system/media/camera/docs/metadata_definitions.xml
.
Pour obtenir une implémentation de référence de cette fonctionnalité, consultez hardware/google/camera/devices/EmulatedCamera/hwl/
.
API publiques
Les applications peuvent utiliser les API publiques suivantes pour interroger les combinaisons de fonctionnalités compatibles pour l'appareil:
CameraDevice.CameraDeviceSetup
: représentation limitée deCameraDevice
pouvant être utilisée pour interroger des combinaisons d'éléments géographiques sans nécessiter d'instanceCameraDevice
.getCameraDeviceSetup
: acquiert un objetCameraDeviceSetup
pour un ID de caméra donné siisCameraDeviceSetupSupported
renvoietrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: accepte les requêtes de combinaison d'éléments géographiques si cette valeur est égale ou supérieure àVANILLA_ICE_CREAM
.OutputConfiguration
: classe décrivant la sortie de l'appareil photo, qui peut contenir une surface différée à des fins de requêtes de combinaison de fonctionnalités à faible latence.SessionConfiguration
: classe utilitaire décrivant la configuration de la session, y compris les combinaisons de flux et les paramètres de session, qui peuvent être utilisés pour les requêtes de combinaison de fonctionnalités.
Validation
Pour valider votre implémentation de cette fonctionnalité, utilisez les tests VTS, CTS et ITS de la caméra (CTS Verifier) suivants:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ITS de la caméra
- cts/apps/CameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/CameraITS/tests/scene6/test_session_characteristics_zoom.py