Configurations de flux

Android 10 introduit des fonctionnalités permettant aux clients de l'appareil photo pour choisir la caméra optimale pour des cas d'utilisation spécifiques et pour s'assurer que certaines combinaisons de flux sont compatibles avec la caméra. Une configuration de flux fait référence à un seul un flux de caméra configuré dans la caméra et une combinaison de flux fait référence à un ou plusieurs ensembles de flux configurés sur la caméra. Pour en savoir plus sur ces fonctionnalités, voir configurations de flux recommandées et API permettant d'interroger les combinaisons de flux.

Implémentation de référence

Il existe une implémentation de référence côté fournisseur de la configuration recommandée. et l'API pour interroger les caractéristiques de combinaison de flux. Vous trouverez mise en œuvre à l'adresse QCamera3HWI.cpp

Les fournisseurs de caméras peuvent annoncer les configurations de flux recommandées pour une utilisation spécifique. aux clients appareils photo. Ces configurations de flux recommandées, des sous-ensembles StreamConfigurationMap peut aider les clients de l'appareil photo à choisir les configurations optimales.

Bien que StreamConfigurationMap fournit des informations exhaustives sur la configuration des flux aux clients de la caméra, ne fournit aucune information sur l'efficacité, la puissance ou les performances l'impact du choix d'un flux plutôt que d'un autre. Les clients peuvent choisir librement parmi toutes les configurations de flux possibles, à l'aide de configurations d'appareil photo et d'applications non optimales, des recherches exhaustives chronophages.

Par exemple, même si certains formats YUV traités sont requis et doivent être il est possible que l'appareil photo ne soit pas compatible de façon native avec les formats. Ce entraîne une passe de traitement supplémentaire pour la conversion du format et réduit l'efficacité. La taille et le format correspondant peuvent également avoir une ce qui rend possible certaines dimensions en termes de puissance et des performances.

Les cartes de configuration de flux recommandées ne doivent pas nécessairement être exhaustives par rapport aux StreamConfigurationMap : Les mappages de configuration suggérés doivent respecter les exigences décrites dans le mise en œuvre et peut inclure n'importe quel les formats disponibles, les tailles ou d'autres valeurs trouvées dans StreamConfigurationMap : Formats, tailles ou autres valeurs masqués introuvables dans StreamConfigurationMap ne peut pas être inclus dans les cartes de configuration de flux recommandées.

Tous les tests restent inchangés et ne sont pas assouplis selon les recommandations des configurations de flux.

Les configurations de flux recommandées fournies par l'implémentation de la caméra sont les suivantes : sont facultatifs, et le client de l'appareil photo 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 champs statiques suivants : entrées de métadonnées:

  • android.scaler.availableRecommendedStreamConfigurations: le sous-ensemble recommandé de configurations de flux pour des cas d'utilisation spécifiques. La utilise des bitmaps indiquant les cas d'utilisation suggérés au format [1 << PREVIEW | 1 << RECORD..]. Les cas d'utilisation étendent tuple normal (format, width, height, input) avec une entrée supplémentaire. Cas d'utilisation publics non existants ou autres bits définis dans la plage Les [PUBLIC_END, VENDOR_START] sont interdites.

    Ces informations sont stockées availableRecommendedStreamConfigurations .

    L'exemple suivant présente un tableau pour un flux recommandé d'un appareil photo compatible uniquement avec les résolutions 4K et 1080p, les deux résolutions sont recommandées pour l'enregistrement vidéo, mais seule 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 compatible avec l'appareil): espace de données de profondeur recommandé configurations de flux suggérées pour cette caméra. Semblable à la section au-dessus de l'entrée de métadonnées, un autre bitmap indique la suggestion différents cas d'utilisation.

    Ces informations sont stockées availableRecommendedInputOutputFormatsMap .

  • android.scaler.availableRecommendedInputOutputFormatsMap (disponible uniquement si compatible avec l'appareil): mise en correspondance des formats d'image recommandés qui sont suggérées pour cette caméra pour les flux d'entrée, formats de sortie correspondants.

    Ces informations sont stockées availableRecommendedDepthStreamConfigurations .

Ces informations sont accessibles aux clients de l'appareil photo via la RecommendedStreamConfigurationMap API.

Cas d'utilisation obligatoires

Veuillez fournir les configurations de flux recommandées pour les cas d'utilisation suivants et répondent aux exigences correspondantes:

Cas d'utilisation Exigence
PREVIEW L'aperçu ne doit inclure que des configurations de flux traités 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 paramètres profils multimédias compatibles au format IMPLEMENTATION_DEFINED.
VIDEO_SNAPSHOT Un instantané vidéo doit inclure des configurations de flux ayant au moins aussi grande que les résolutions maximales RECORD et uniquement avec le BLOB + Combinaison format/espace de données DATASPACE_JFIF (JPEG). Les configurations ne devrait pas entraîner de problèmes d'aperçu et devrait pouvoir s'exécuter à 30 FPS.
SNAPSHOT Les configurations de flux d'instantanés doivent inclure au moins une configuration de taille proche à android.sensor.info.activeArraySize avec le BLOB + Combinaison format/espace de données DATASPACE_JFIF (JPEG). Prise en compte des restrictions sur le format, l'alignement et d'autres restrictions spécifiques aux fournisseurs, la zone de la taille maximale suggérée ne doit pas être inférieure à 97% du capteur de la taille d'un tableau.
ZSL (si compatible) Configurations recommandées pour les flux d'entrée (si compatible avec la caméra) ne doivent être annoncés qu'avec d'autres sorties traitées ou bloquantes .
RAW (si compatible) Configurations de flux brutes recommandées, si la caméra est compatible ne doit inclure que des formats de sortie RAW.

Autres cas d'utilisation

Vous pouvez fournir d'autres flux de configuration recommandés pour les cas d'utilisation spécifiques à votre implémentation.

Validation

Pour tester l'implémentation des flux de configuration recommandés, exécutez la tests CTS et VTS suivants:

API pour interroger les combinaisons de flux

La plate-forme Android est compatible avec une API permettant d'interroger des combinaisons de flux. Implémentation Cette API permet aux clients d'un appareil photo d'interroger les combinaisons de flux en toute sécurité à tout moment. après avoir reçu un Appareil photo ce qui évite les frais généraux liés à l'initialisation d'une session de capture de l'appareil photo et des exceptions à la caméra ultérieures, y compris des dysfonctionnements, et accélère les requêtes.

Cette fonctionnalité permet également aux clients caméra de recevoir une liste de combinaisons de flux compilées selon les consignes pour CameraDevice et le niveau matériel compatible. Des tests CTS sont disponibles pour appliquer l'exactitude des résultats de la requête couvrant autant que possible un sous-ensemble mineur les combinaisons de flux les plus courantes.

Vous pouvez choisir de prendre en charge cette fonctionnalité en implémentant une API HIDL supplémentaire dans le HAL de la caméra.

Implémentation

Pour qu'une API puisse interroger des combinaisons de flux, le HAL de la caméra doit fournir une pour l'implémentation isStreamCombinationSupported Interface API HIDL. Cette interface vérifie si la caméra est compatible avec 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 abouti.
  • METHOD_NOT_SUPPORTED: la caméra n'est pas compatible avec le flux. requête de combinaison.
  • INTERNAL_ERROR : impossible de terminer la requête de combinaison de flux pour les raisons suivantes : une erreur interne.

L'API renvoie la valeur "true" si la combinaison de flux est acceptée. Sinon, il renvoie "false".

Le framework utilise l'API publique isSessionConfigurationSupported pour vérifier si la configuration de session en question est compatible avec la caméra appareil.

Les appels à l'API ne doivent avoir aucun effet secondaire sur le fonctionnement normal de l'appareil photo. API les appels ne doivent pas modifier l'état interne ni ralentir les performances de la caméra. Une fois que l'HAL de la caméra a validé une combinaison de flux, assurez-vous peuvent configurer correctement la combinaison de flux. Pour éviter tout problème, assurez-vous que l'implémentation ne stocke aucune information lors de requêtes de combinaison de flux, modifier son état interne ou interagir avec et chronophages.

Validation

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

Modules CTS de la caméra:

VTS de la caméra:

VtsHalCameraProviderV2_4TargetTest.cpp