Configurations de flux

Android inclut des fonctionnalités permettant aux clients de l'appareil photo de choisir les flux de caméras 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 flux de caméra unique 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 Configurations de flux recommandées et API pour interroger les 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 permettant d'interroger les fonctionnalités de combinaison de flux. Vous trouverez cette implémentation dans QCamera3HWI.cpp.

Les fournisseurs de caméras peuvent recommander des configurations de flux pour des cas d'utilisation spécifiques aux clients de caméras. Ces configurations de flux recommandées, qui sont des sous-ensembles de StreamConfigurationMap, peuvent aider les clients de l'appareil photo à choisir des configurations optimales.

Bien que StreamConfigurationMap fournisse des informations exhaustives sur la configuration des flux aux clients de caméras, il ne fournit aucune information sur l'efficacité, la consommation d'énergie ou l'impact sur les performances du choix d'un flux plutôt qu'un autre. Les clients de l'appareil photo peuvent choisir librement parmi toutes les configurations de flux possibles, mais dans de nombreux cas, cela conduit à des clients utilisant des configurations de caméra sous-optimales et à des applications effectuant des recherches exhaustives chronophages.

Par exemple, bien que certains formats YUV traités soient requis et doivent être pris en charge, il est possible que l'appareil photo ne soit pas compatible avec ces formats de manière native. Cela entraîne un traitement supplémentaire pour la conversion du 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.

Il n'est pas nécessaire que vos configurations de flux recommandées soient exhaustives par rapport à StreamConfigurationMap. Les mappages de configuration suggérés doivent respecter les exigences de la section Implémentation et peuvent inclure l'un des formats, tailles ou autres valeurs disponibles dans StreamConfigurationMap. Les formats, tailles ou autres valeurs masqués 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 l'appareil photo doit remplir 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 [1 << PREVIEW | 1 << RECORD..]. Les cas d'utilisation étendent le tuple habituel (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 les résolutions 4K et 1080p, où les deux résolutions sont préférées pour l'enregistrement vidéo, mais où 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 le prend en charge) : configurations de flux d'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 le prend en charge) : mappage des formats d'image recommandé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 l'appareil photo via l'API RecommendedStreamConfigurationMap.

Cas d'utilisation obligatoires

Vous devez fournir des configurations de flux recommandées pour les cas d'utilisation suivants et respecter les 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 contenus multimédias compatibles annoncés au 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 entraîner de problèmes 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 dont la taille est proche de android.sensor.info.activeArraySize avec la combinaison 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 aux fournisseurs, la zone de la taille maximale suggérée ne doit pas être inférieure à 97 % de la zone de la taille de la matrice du capteur.
ZSL (si disponible) Si l'appareil photo le permet, les configurations de flux d'entrée recommandées ne doivent être annoncées qu'avec d'autres formats de sortie traités ou en attente.
RAW (si disponible) Si l'appareil photo le permet, les configurations de flux bruts 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 fonctionnalités

À partir d'Android 15, la plate-forme Android fournit une API permettant d'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, 60 fps, la vidéo HDR, l'Ultra HDR, le zoom ultra grand-angle et la stabilisation en tant que contrôles orthogonaux.

Conditions requises

Pour que l'API puisse 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 compatible, la stabilisation de l'aperçu doit être orthogonale aux autres fonctionnalités. Cela signifie que pour un appareil photo qui prend en charge la stabilisation de l'aperçu, la valeur renvoyée de isStreamCombinationWithSettingsSupported pour une combinaison particulière 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 être compatible avec la stabilisation de l'aperçu avec un aperçu HLG10 10 bits pour les aperçus 1080p et 720p, ainsi qu'avec les fichiers JPEG de taille maximale. Pour en savoir plus sur ces exigences, consultez la section 2.2.7.2. Caméra du CDD.

Implémentation

Pour que l'API puisse interroger les combinaisons de fonctionnalités, implémentez les API de requête de combinaisons de fonctionnalités suivantes dans la version 3 de ICameraDevice :

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 de fonctionnalités 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 de CameraDevice pouvant être utilisée pour interroger des combinaisons de caractéristiques sans nécessiter d'instance CameraDevice.

  • getCameraDeviceSetup : acquiert un objet CameraDeviceSetup pour un ID de caméra donné si isCameraDeviceSetupSupported renvoie true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION : accepte les requêtes de combinaison de caractéristiques si cette valeur est VANILLA_ICE_CREAM ou supérieure.

  • OutputConfiguration : classe décrivant la sortie de la caméra, qui peut contenir une surface différée pour les 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 peut être utilisée pour les requêtes de combinaison de fonctionnalités.

Validation

Pour valider l'implémentation de cette fonctionnalité, utilisez les tests VTS, CTS et Camera ITS (CTS Verifier) suivants :

VTS

CTS

Camera ITS