Streamkonfigurationen

Android bietet Funktionen, mit denen Kameraclients die optimalen Kamerastreams für bestimmte Anwendungsfälle auswählen und dafür sorgen können, dass bestimmte Streamkombinationen vom Kameragerät unterstützt werden. Eine Streamkonfiguration bezieht sich auf einen einzelnen Kamerastream, der auf dem Kameragerät konfiguriert ist. Eine Streamkombination bezieht sich auf einen oder mehrere Streamsätze, die auf dem Kameragerät konfiguriert sind. Weitere Informationen zu diesen Funktionen finden Sie unter Empfohlene Streamkonfigurationen und API zum Abfragen von Kombinationen von Funktionen.

Referenzimplementierung

Es gibt eine anbieterseitige Referenzimplementierung der empfohlenen Konfigurationsstreams und die API zum Abfragen von Funktionen zur Streamkombination. Diese Implementierung finden Sie unter QCamera3HWI.cpp.

Kameraanbieter können Kameraclients empfohlene Streamkonfigurationen für bestimmte Anwendungsfälle präsentieren. Diese empfohlenen Streamkonfigurationen sind Teilmengen von StreamConfigurationMap und können Kameraclients bei der Auswahl optimaler Konfigurationen helfen.

StreamConfigurationMap enthält zwar umfassende Informationen zur Streamkonfiguration für Kameraclients, aber keine Informationen zu den Auswirkungen auf Effizienz, Stromverbrauch oder Leistung, die sich aus der Auswahl eines Streams ergeben. Kamera-Clients können frei zwischen allen möglichen Streamkonfigurationen wählen. In vielen Fällen führt dies jedoch dazu, dass Clients suboptimale Kamerakonfigurationen verwenden und Apps zeitaufwendige, umfassende Suchanfragen durchführen.

Auch wenn einige verarbeitete YUV-Formate erforderlich sind und unterstützt werden müssen, unterstützt das Kameragerät diese Formate möglicherweise nicht nativ. Dies führt zu einem zusätzlichen Verarbeitungsdurchlauf für die Formatkonvertierung und verringert die Effizienz. Größe und Seitenverhältnis können ebenfalls einen ähnlichen Einfluss haben, sodass bestimmte Abmessungen in Bezug auf Leistung und Energieeffizienz bevorzugt werden.

Ihre empfohlenen Streamkonfigurationszuordnungen müssen im Vergleich zur StreamConfigurationMap nicht vollständig sein. Die vorgeschlagenen Konfigurationskarten müssen den Anforderungen im Abschnitt Implementierung entsprechen und können alle verfügbaren Formate, Größen oder anderen Werte aus StreamConfigurationMap enthalten. Ausgeblendete Formate, Größen oder andere Werte, die nicht in der StreamConfigurationMap gefunden werden, können nicht in empfohlene Streamkonfigurationskarten aufgenommen werden.

Alle Tests bleiben unverändert und werden nicht gemäß den empfohlenen Streamkonfigurationen gelockert.

Die von der Kameraimplementierung empfohlenen Streamkonfigurationen sind optional und können vom Kameraclient ignoriert werden.

Implementierung

So implementieren Sie diese Funktion:

Metadateneinträge

Um diese Funktion zu aktivieren, müssen die folgenden statischen Metadateneinträge in der HAL der Kamera eingefügt werden:

  • android.scaler.availableRecommendedStreamConfigurations: Die empfohlene Teilmenge der Streamkonfigurationen für bestimmte Anwendungsfälle. In der Erklärung werden Bitmaps verwendet, die die vorgeschlagenen Anwendungsfälle in Form von [1 << PREVIEW | 1 << RECORD..] angeben. Die Anwendungsfälle erweitern das reguläre Tupel (Format, Breite, Höhe, Eingabe) um einen zusätzlichen Eintrag. Nicht vorhandene öffentliche Anwendungsfälle oder andere Bits, die im Bereich [PUBLIC_END, VENDOR_START] festgelegt sind, sind nicht zulässig.

    Diese Informationen werden im Metadaten-Tag availableRecommendedStreamConfigurations gespeichert.

    Das folgende Beispiel zeigt ein Array für eine empfohlene Streamkonfiguration für eine Kamera, die nur 4K und 1080p unterstützt. Dabei werden beide Auflösungen für die Videoaufzeichnung bevorzugt, für die Vorschau wird jedoch nur 1080p empfohlen.

    [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 (nur verfügbar, wenn vom Gerät unterstützt): Die empfohlenen Streamkonfigurationen für den Tiefendatenraum für dieses Kameragerät. Ähnlich wie beim Metadateneintrag oben werden die vorgeschlagenen Anwendungsfälle in einer zusätzlichen Anwendungsfall-Bitmap angezeigt.

    Diese Informationen werden im Metadaten-Tag availableRecommendedInputOutputFormatsMap gespeichert.

  • android.scaler.availableRecommendedInputOutputFormatsMap (nur verfügbar, wenn vom Gerät unterstützt): Die Zuordnung der empfohlenen Bildformate, die für dieses Kameragerät für Eingabestreams vorgeschlagen werden, zu den entsprechenden Ausgabeformaten.

    Diese Informationen werden im Metadaten-Tag availableRecommendedDepthStreamConfigurations gespeichert.

Diese Informationen sind für Kamera-Clients über die RecommendedStreamConfigurationMap API verfügbar.

Erforderliche Anwendungsfälle

Für die folgenden Anwendungsfälle müssen empfohlene Streamkonfigurationen bereitgestellt werden, die den entsprechenden Anforderungen entsprechen:

Anwendungsbeispiel Anforderung
PREVIEW Eine Vorschau darf nur verarbeitete Streamkonfigurationen ohne Ruckler mit Ausgabeformaten wie YUV_420_888 und IMPLEMENTATION_DEFINED enthalten.
RECORD Ein Videoeintrag muss Streamkonfigurationen enthalten, die mit den angegebenen unterstützten Medien-Profilen mit dem IMPLEMENTATION_DEFINED-Format übereinstimmen.
VIDEO_SNAPSHOT Ein Video-Snapshot muss Streamkonfigurationen enthalten, die mindestens so groß wie die maximalen RECORD-Auflösungen sind, und nur die Kombination aus BLOB und DATASPACE_JFIF-Format/Datenraum (JPEG). Die Konfigurationen sollten keine Vorschaufehler verursachen und mit 30 fps laufen können.
SNAPSHOT Snapshot-Streamkonfigurationen müssen mindestens eine Konfiguration mit einer Größe von etwa android.sensor.info.activeArraySize mit der Kombination aus BLOB-Format und DATASPACE_JFIF-Datenraum (JPEG) enthalten. Unter Berücksichtigung von Einschränkungen hinsichtlich Seitenverhältnis, Ausrichtung und anderer anbieterspezifischer Einschränkungen darf die Fläche der maximal empfohlenen Größe nicht weniger als 97% der Sensorarrayfläche betragen.
ZSL (falls unterstützt) Empfohlene Konfigurationen von Eingabestreams müssen, sofern vom Kameragerät unterstützt, nur zusammen mit anderen verarbeiteten oder verzögerten Ausgabeformaten beworben werden.
RAW (falls unterstützt) Empfohlene Konfigurationen für Raw-Streams müssen, sofern vom Kameragerät unterstützt, nur RAW-basierte Ausgabeformate enthalten.

Weitere Anwendungsfälle

Sie können zusätzliche empfohlene Konfigurationsstreams für Anwendungsfälle bereitstellen, die für Ihre Implementierung spezifisch sind.

Zertifizierungsstufe

Führen Sie die folgenden CTS- und VTS-Tests aus, um die Implementierung der empfohlenen Konfigurationsstreams zu testen:

API zum Abfragen von Kombinationen von Funktionen

Ab Android 15 bietet die Android-Plattform eine API zum Abfragen von Funktionskombinationen. Über diese API können Kameraclients abfragen, ob eine bestimmte Kombination von Funktionen vom Gerät unterstützt wird. Diese API ist erforderlich, da die camera2 API verschiedene Funktionen wie 4K, 60 fps, HDR-Video, UltraHDR, Ultraweitwinkelzoom und Stabilisierung als orthogonale Steuerelemente modelliert.

Voraussetzungen

Damit die API Kombinationen von Funktionen abfragen kann, muss die Kamera-HAL Version 3 der ICameraDevice-Schnittstelle implementieren. Weitere Informationen finden Sie im Abschnitt Implementierung.

Wenn die API unterstützt wird, muss die Vorschaustabilisierung unabhängig von anderen Funktionen erfolgen. Das bedeutet, dass für ein Kameragerät, das die Bildstabilisierung in der Vorschau unterstützt, der Rückgabewert von isStreamCombinationWithSettingsSupported für eine bestimmte Kombination derselbe Wert sein muss, wenn die Bildstabilisierung in der Vorschau aktiviert oder deaktiviert ist. Dadurch wird der Suchraum für Suchanfragen nach Kombinationen von Funktionen reduziert.

Bei der Medienleistungsklasse 15 muss die Hauptkamera außerdem die Vorschaustabilisierung mit 10-Bit-HLG10-Vorschau für 1080p- und 720p-Vorschau und JPEGs in maximaler Größe unterstützen. Weitere Informationen zu diesen Anforderungen finden Sie im Abschnitt 2.2.7.2. Kamera des CDD.

Implementierung

Um die API zur Abfrage von Kombinationen von Funktionen zu unterstützen, implementieren Sie in Version 3 von ICameraDevice die folgenden APIs für Abfragen zu Kombinationen von Funktionen:

Für Versionen unter Version 3 der ICameraDevice-Oberfläche sollte die HAL die Methode isStreamCombinationSupported implementieren.

Weitere Informationen zu den Kombinationen von Funktionen, die von der API abgefragt werden, finden Sie in der Dokumentation zu sessionConfigurationQueryVersion in system/media/camera/docs/metadata_definitions.xml.

Eine Referenzimplementierung dieser Funktion finden Sie unter hardware/google/camera/devices/EmulatedCamera/hwl/.

Öffentliche APIs

Apps können die folgenden öffentlichen APIs verwenden, um unterstützte Kombinationen von Funktionen für das Gerät abzufragen:

  • CameraDevice.CameraDeviceSetup: Eine eingeschränkte Darstellung von CameraDevice, mit der sich Kombinationen von Funktionen abfragen lassen, ohne dass eine CameraDevice-Instanz erforderlich ist.

  • getCameraDeviceSetup: Erwirbt ein CameraDeviceSetup-Objekt für eine bestimmte Kamera-ID, wenn isCameraDeviceSetupSupported true zurückgibt.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Unterstützt Abfragen für Kombinationen von Elementen, wenn dieser Wert VANILLA_ICE_CREAM oder höher ist.

  • OutputConfiguration: Eine Klasse, die die Kameraausgabe beschreibt und eine verzögerte Oberfläche für Abfragen mit Kombinationen von Funktionen mit niedriger Latenz enthalten kann.

  • SessionConfiguration: Eine Dienstklasse, die die Sitzungskonfiguration einschließlich Streamkombinationen und Sitzungsparameter beschreibt, die für Abfragen mit Kombinationen von Funktionen verwendet werden können.

Zertifizierungsstufe

Verwenden Sie die folgenden VTS-, CTS- und Camera ITS (CTS Verifier)-Tests, um die Implementierung dieser Funktion zu validieren:

VTS

CTS

Kamera-ITS