Configurations de flux

Android 10 introduit 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 prises en charge par l'appareil photo. Une configuration de flux fait référence à un seul flux de caméra 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 des 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 caméras clientes à choisir des configurations optimales.

Bien que StreamConfigurationMap fournisse des informations de configuration de flux exhaustives aux clients de la 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 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éra sous-optimales et des applications qui effectuent des recherches exhaustives chronophages.

Par exemple, bien que certains formats YUV traités soient requis et doivent être pris en charge, l'appareil photo peut ne pas avoir de prise en charge native pour les formats. Cela entraîne une passe de traitement supplémentaire pour la conversion de format et réduit l'efficacité. La taille et le rapport d'aspect 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 de mise en œuvre et peuvent inclure n'importe lequel 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 relâchés 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é, la caméra HAL doit remplir 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 [1 << PREVIEW | 1 << RECORD..] . Les cas d'utilisation étendent le tuple normal (format, largeur, hauteur, entrée) avec 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 qui ne prend en charge que 4K et 1080p, où les deux résolutions sont préférées pour l'enregistrement vidéo mais seulement 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) : les 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 si pris en charge par l'appareil) : le mappage des formats d'image recommandés qui sont suggérés pour cet appareil photo pour les flux d'entrée, à leurs formats de sortie correspondants.

    Ces informations sont stockées dans la balise de métadonnées availableRecommendedDepthStreamConfigurations .

Ces informations sont disponibles pour les caméras clientes 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 qui correspondent aux profils média pris en charge 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 format/espace de données BLOB + DATASPACE_JFIF (JPEG). Les configurations ne doivent pas provoquer de problèmes de prévisualisation et doivent pouvoir fonctionner à 30 ips.
SNAPSHOT Les configurations de flux d'instantanés doivent en inclure au moins un avec une taille proche de android.sensor.info.activeArraySize avec la combinaison format/espace de données BLOB + DATASPACE_JFIF (JPEG). En tenant compte des restrictions sur le rapport d'aspect, l'alignement et d'autres restrictions spécifiques au fournisseur, la zone de la taille maximale suggérée ne doit pas être inférieure à 97 % de la zone de la 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 ne doivent être annoncées qu'avec d'autres formats de sortie traités ou bloqués.
RAW (si pris en charge) Si elles sont prises en charge par l'appareil photo, les configurations de flux brut recommandées ne doivent inclure que des formats de sortie basés sur 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 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éras 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, y compris la rupture de caméra, et permettant des requêtes plus rapides.

Cette fonctionnalité permet également aux clients 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. Les tests CTS sont disponibles pour faire respecter autant que possible l'exactitude des résultats de la requête 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 d'API HIDL supplémentaire dans la caméra HAL.

Mise en œuvre

Pour prendre en charge une API pour interroger les combinaisons de flux, la couche HAL de la caméra 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 : l'appareil photo 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 cadre utilise l'API publique isSessionConfigurationSupported pour vérifier si la configuration de session particulière est prise en charge par le périphérique de 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 pas modifier les états internes ni ralentir les performances de la caméra. Assurez-vous qu'une fois que la caméra HAL 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 pendant les requêtes de combinaison de flux, ne modifie pas son état interne ou ne s'engage pas dans des opérations chronophages.

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