Configurations de flux

Android 10 introduit des fonctionnalités permettant aux clients de caméra de choisir les flux de caméra optimaux pour des cas d'utilisation spécifiques et de garantir que certaines combinaisons de flux sont prises en charge par la caméra. Une configuration de flux fait référence à un flux de caméra unique configuré dans le dispositif de caméra et une combinaison de flux fait référence à un ou plusieurs ensembles de flux configurés dans le dispositif de caméra. Pour en savoir plus sur ces fonctionnalités, consultez les configurations de flux recommandées et l'API pour interroger les combinaisons de flux .

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 pouvez trouver cette implémentation sur QCamera3HWI.cpp

Les fournisseurs de caméras peuvent annoncer aux clients caméras les 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 caméra, il ne fournit aucune information sur l'efficacité, la puissance ou les impacts sur les performances du choix d'un flux plutôt qu'un autre. Les clients de 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éra sous-optimales et des applications qui nécessitent des recherches exhaustives et fastidieuses.

Par exemple, bien que certains formats YUV traités soient requis et doivent être pris en charge, l'appareil photo peut ne pas prendre en charge nativement ces formats. Cela entraîne une étape de traitement supplémentaire pour la conversion de format et réduit l'efficacité. La taille et le rapport hauteur/largeur correspondant peuvent également avoir un impact similaire, rendant des dimensions particulières préférables en termes de puissance et de performances.

Vos cartes de configuration de flux recommandées ne doivent pas nécessairement être exhaustives par rapport à StreamConfigurationMap . Les cartes de configuration suggérées doivent respecter les exigences de la section d'implémentation et peuvent inclure l'un des formats, tailles ou autres valeurs disponibles trouvés dans StreamConfigurationMap . Les formats, tailles ou autres valeurs masqués introuvables 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.

Mise en œuvre

Suivez ces étapes pour implémenter cette fonctionnalité.

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 : le sous-ensemble recommandé de configurations de flux pour des cas d'utilisation spécifiques. La déclaration utilise des bitmaps simples 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) avec une entrée supplémentaire. Les cas d'utilisation publique non existants 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 qui prend uniquement en charge 4K et 1080p, où les deux résolutions sont préférées pour l'enregistrement vidéo mais où seul 1080p est suggéré 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 pris en charge par l'appareil) : configurations de flux d'espace de données de profondeur recommandées suggérées pour cet appareil photo. Semblable à 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 s'il est pris en charge par l'appareil) : mappage des formats d'image recommandés suggérés pour cet appareil photo pour les flux d'entrée, vers 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 RecommendationStreamConfigurationMap .

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 doit uniquement inclure des configurations de flux traités non bloquées avec des formats de sortie tels que YUV_420_888 et IMPLEMENTATION_DEFINED .
RECORD Un enregistrement vidéo doit inclure des configurations de flux qui correspondent aux profils multimédias pris en charge annoncés avec le format IMPLEMENTATION_DEFINED .
VIDEO_SNAPSHOT Un instantané vidéo doit inclure des configurations de flux qui sont au moins aussi grandes que les résolutions maximales d'enregistrement et uniquement avec la combinaison format/espace de données BLOB + DATASPACE_JFIF (JPEG). Les configurations ne devraient pas provoquer de problèmes d’aperçu et devraient pouvoir fonctionner à 30 ips.
SNAPSHOT Les configurations de flux d'instantanés doivent en inclure au moins un d'une taille proche de android.sensor.info.activeArraySize avec la combinaison BLOB + DATASPACE_JFIF format/espace de données (JPEG). En tenant compte des restrictions relatives au format d'image, à l'alignement et à d'autres restrictions spécifiques au fournisseur, la zone de taille maximale suggérée ne doit pas être inférieure à 97 % de la zone de taille du réseau de capteurs.
ZSL (si pris en charge) Si elles sont prises en charge par la caméra, les configurations de flux d'entrée recommandées doivent uniquement être annoncées avec d'autres formats de sortie traités ou bloqués.
RAW (si pris en charge) Si elles sont prises en charge par la caméra, les configurations de flux brut recommandées doivent uniquement inclure les formats de sortie RAW.

Autres cas d'utilisation

Vous pouvez fournir des flux de configuration recommandés supplémentaires pour des 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 pour interroger les combinaisons de flux

La plate-forme Android prend en charge une API pour interroger les combinaisons de flux. La mise en œuvre de cette API permet aux clients de caméra d'interroger en toute sécurité des combinaisons de flux à tout moment après avoir reçu une instance CameraDevice valide, supprimant ainsi la surcharge liée à l'initialisation d'une session de capture de caméra et le potentiel d'exceptions de caméra ultérieures, notamment une rupture de caméra, et permettant des requêtes plus rapides.

Cette fonctionnalité permet également aux clients de caméra de recevoir une liste de combinaisons de flux compilées conformément aux directives de CameraDevice et au niveau matériel pris en charge. Des tests CTS sont disponibles pour garantir autant que possible l'exactitude des résultats des requêtes, couvrant un sous-ensemble mineur des combinaisons de flux les plus courantes.

Vous pouvez choisir de prendre en charge cette fonctionnalité en implémentant un appel API HIDL supplémentaire dans Camera HAL.

Mise en œuvre

Pour prendre en charge une API permettant d'interroger des combinaisons de flux, la caméra HAL doit fournir une implémentation pour l'interface API HIDL isStreamCombinationSupported . Cette interface vérifie si le périphérique de caméra prend en charge une combinaison de flux de caméra spécifiée.

Lorsqu'elle est appelée, l'API doit renvoyer l'un des codes d'état suivants :

  • OK : la requête de combinaison de flux a réussi.
  • METHOD_NOT_SUPPORTED : le périphérique caméra ne prend pas en charge la requête de combinaison de flux.
  • INTERNAL_ERROR : la requête de combinaison de flux ne peut pas se terminer en raison d'une erreur interne.

L'API renvoie true si la combinaison de flux est prise en charge. Sinon, il renvoie faux.

Le framework utilise l'API publique isSessionConfigurationSupported pour vérifier si la configuration de session particulière est prise en charge par le périphérique caméra.

Les appels à l'API ne doivent avoir aucun effet secondaire sur le fonctionnement normal de la caméra. Les appels d'API ne doivent modifier aucun état interne ni ralentir les performances de la caméra. Assurez-vous qu'une fois que le HAL de la caméra a validé avec succès une combinaison de flux, les clients de la caméra peuvent configurer avec succès la combinaison de flux. Pour éviter les problèmes, assurez-vous que l'implémentation ne stocke aucune information lors des requêtes de combinaison de flux, ne modifie pas son état interne ou ne s'engage dans des opérations fastidieuses.

Validation

Pour valider cette fonctionnalité, exécutez les scénarios de test CTS et VTS de caméra suivants :

Modules caméra CTS :

Caméra VTS :

VtsHalCameraProviderV2_4TargetTest.cpp