Stream-Konfigurationen

Android 10 führt Funktionen ein, die es Kamera-Clients ermöglichen, optimale Kamera-Streams für bestimmte Anwendungsfälle auszuwählen und sicherzustellen, dass bestimmte Stream-Kombinationen vom Kameragerät unterstützt werden. Eine Stream-Konfiguration bezieht sich auf einen einzelnen Kamera-Stream, der im Kameragerät konfiguriert ist, und eine Stream-Kombination bezieht sich auf einen oder mehrere Stream-Sets, die im Kameragerät konfiguriert sind. Weitere Informationen zu diesen Funktionen finden Sie unter Empfohlene Stream-Konfigurationen und API zum Abfragen von Stream-Kombinationen .

Referenzimplementierung

Es gibt eine herstellerseitige Referenzimplementierung der empfohlenen Konfigurations-Streams und der API zum Abfragen von Stream-Kombinationsfunktionen. Sie finden diese Implementierung unter QCamera3HWI.cpp

Kameraanbieter können Kamerakunden empfohlene Stream-Konfigurationen für bestimmte Anwendungsfälle anbieten. Diese empfohlenen Stream-Konfigurationen, die Teilmengen von StreamConfigurationMap sind, können Kamera-Clients bei der Auswahl optimaler Konfigurationen unterstützen.

Obwohl StreamConfigurationMap Kamera-Clients ausführliche Stream-Konfigurationsinformationen bereitstellt, liefert es keine Informationen über die Effizienz, Leistung oder Leistungsauswirkungen der Auswahl eines Streams gegenüber einem anderen. Kamera-Clients können frei aus allen möglichen Stream-Konfigurationen wählen, aber in vielen Fällen führt dies dazu, dass Clients suboptimale Kamerakonfigurationen und Anwendungen verwenden und zeitaufwändige, umfassende Suchvorgänge durchführen.

Obwohl beispielsweise einige verarbeitete YUV-Formate erforderlich sind und unterstützt werden müssen, bietet das Kameragerät möglicherweise keine native Unterstützung für diese Formate. Dies führt zu einem zusätzlichen Verarbeitungsdurchgang für die Formatkonvertierung und verringert die Effizienz. Auch die Größe und das entsprechende Seitenverhältnis können einen ähnlichen Einfluss haben und bestimmte Abmessungen im Hinblick auf Leistung und Leistung vorzuziehen machen.

Ihre empfohlenen Stream-Konfigurationskarten müssen im Vergleich zur StreamConfigurationMap nicht vollständig sein. Die vorgeschlagenen Konfigurationskarten müssen den Anforderungen im Implementierungsabschnitt entsprechen und können alle verfügbaren Formate, Größen oder andere Werte enthalten, die in StreamConfigurationMap gefunden werden. Versteckte Formate, Größen oder andere Werte, die in StreamConfigurationMap nicht gefunden werden, können nicht in empfohlene Stream-Konfigurationskarten aufgenommen werden.

Alle Tests bleiben unverändert und werden abhängig von den empfohlenen Stream-Konfigurationen nicht gelockert.

Die von der Kameraimplementierung bereitgestellten empfohlenen Stream-Konfigurationen sind optional und können vom Kamera-Client ignoriert werden.

Implementierung

Befolgen Sie diese Schritte, um diese Funktion zu implementieren.

Metadateneinträge

Um diese Funktion zu aktivieren, muss die Kamera-HAL die folgenden statischen Metadateneinträge ausfüllen:

  • android.scaler.availableRecommendedStreamConfigurations : Die empfohlene Teilmenge der Stream-Konfigurationen für bestimmte Anwendungsfälle. Die Deklaration verwendet einfache Bitmaps, die die vorgeschlagenen Anwendungsfälle in der Form [1 << PREVIEW | 1 << RECORD..] angeben [1 << PREVIEW | 1 << RECORD..] . 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 im Bereich [PUBLIC_END, VENDOR_START] festgelegte Bits sind verboten.

    Diese Informationen werden im Metadaten-Tag availableRecommendedStreamConfigurations gespeichert.

    Das folgende Beispiel zeigt ein Array für eine empfohlene Stream-Konfiguration für ein Kameragerät, das nur 4K und 1080p unterstützt, wobei beide Auflösungen für die Videoaufzeichnung bevorzugt werden, für die Vorschau jedoch nur 1080p empfohlen wird.

    [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 Tiefen-Dataspace-Stream-Konfigurationen, die für dieses Kameragerät vorgeschlagen werden. Ähnlich wie beim obigen Metadateneintrag zeigt eine zusätzliche Anwendungsfall-Bitmap die vorgeschlagenen Anwendungsfälle an.

    Diese Informationen werden im Metadaten-Tag availableRecommendedInputOutputFormatsMap gespeichert.

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

    Diese Informationen werden im Metadaten-Tag availableRecommendedDepthStreamConfigurations gespeichert.

Diese Informationen stehen Kamera-Clients über die RecommendStreamConfigurationMap- API zur Verfügung.

Erforderliche Anwendungsfälle

Empfohlene Stream-Konfigurationen müssen für die folgenden Anwendungsfälle bereitgestellt werden und die entsprechenden Anforderungen erfüllen:

Anwendungsfall Erfordernis
PREVIEW Eine Vorschau darf nur nicht blockierende verarbeitete Stream-Konfigurationen mit Ausgabeformaten wie YUV_420_888 und IMPLEMENTATION_DEFINED enthalten.
RECORD Ein Videodatensatz muss Stream-Konfigurationen enthalten, die den angekündigten unterstützten Medienprofilen mit dem Format IMPLEMENTATION_DEFINED entsprechen.
VIDEO_SNAPSHOT Ein Video-Schnappschuss muss Stream-Konfigurationen enthalten, die mindestens so groß sind wie die maximalen RECORD-Auflösungen und nur mit der Format-/Datenraumkombination BLOB + DATASPACE_JFIF (JPEG). Die Konfigurationen sollten keine Vorschauprobleme verursachen und mit 30 fps laufen können.
SNAPSHOT Snapshot-Stream-Konfigurationen müssen mindestens eine mit einer Größe in der Nähe von android.sensor.info.activeArraySize mit der Format-/Datenraumkombination BLOB + DATASPACE_JFIF (JPEG) enthalten. Unter Berücksichtigung von Einschränkungen hinsichtlich Seitenverhältnis, Ausrichtung und anderen herstellerspezifischen Einschränkungen sollte die Fläche mit der maximal empfohlenen Größe nicht weniger als 97 % der Größe des Sensorarrays betragen.
ZSL (falls unterstützt) Sofern vom Kameragerät unterstützt, dürfen empfohlene Eingabestream-Konfigurationen nur zusammen mit anderen verarbeiteten oder blockierenden Ausgabeformaten angekündigt werden.
RAW (sofern unterstützt) Sofern vom Kameragerät unterstützt, dürfen die empfohlenen Raw-Stream-Konfigurationen nur RAW-basierte Ausgabeformate umfassen.

Andere Anwendungsfälle

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

Validierung

Um Ihre Implementierung der empfohlenen Konfigurationsstreams zu testen, führen Sie die folgenden CTS- und VTS-Tests aus:

API zum Abfragen von Stream-Kombinationen

Die Android-Plattform unterstützt eine API zum Abfragen von Stream-Kombinationen. Durch die Implementierung dieser API können Kamera-Clients Stream-Kombinationen zu jedem Zeitpunkt nach dem Empfang einer gültigen CameraDevice- Instanz sicher abfragen. Dadurch entfällt der Aufwand für die Initialisierung einer Kameraaufnahmesitzung und das Risiko nachfolgender Kameraausnahmen, einschließlich Kameraausfällen, und ermöglicht schnellere Abfragen.

Mit dieser Funktion können Kamera-Clients auch eine Liste von Stream-Kombinationen erhalten, die gemäß den Richtlinien für CameraDevice und der unterstützten HW-Ebene zusammengestellt wurden. Es stehen CTS-Tests zur Verfügung, um die Richtigkeit der Abfrageergebnisse so weit wie möglich sicherzustellen und dabei eine kleine Teilmenge der gängigsten Stream-Kombinationen abzudecken.

Sie können diese Funktion unterstützen, indem Sie einen zusätzlichen HIDL-API-Aufruf in der Kamera-HAL implementieren.

Implementierung

Um eine API zum Abfragen von Stream-Kombinationen zu unterstützen, muss die Kamera-HAL eine Implementierung für die HIDL-API-Schnittstelle isStreamCombinationSupported bereitstellen. Diese Schnittstelle prüft, ob das Kameragerät eine bestimmte Kamera-Stream-Kombination unterstützt.

Beim Aufruf muss die API einen der folgenden Statuscodes zurückgeben:

  • OK : Die Stream-Kombinationsabfrage war erfolgreich.
  • METHOD_NOT_SUPPORTED : Das Kameragerät unterstützt die Stream-Kombinationsabfrage nicht.
  • INTERNAL_ERROR : Die Stream-Kombinationsabfrage kann aufgrund eines internen Fehlers nicht abgeschlossen werden.

Die API gibt true zurück, wenn die Stream-Kombination unterstützt wird. Andernfalls wird false zurückgegeben.

Das Framework verwendet die öffentliche API isSessionConfigurationSupported , um zu prüfen, ob die jeweilige Sitzungskonfiguration vom Kameragerät unterstützt wird.

Aufrufe an die API dürfen keine Nebenwirkungen auf den normalen Kamerabetrieb haben. API-Aufrufe dürfen keine internen Zustände verändern oder die Kameraleistung verlangsamen. Stellen Sie sicher, dass Kamera-Clients die Stream-Kombination erfolgreich konfigurieren können, nachdem die Kamera-HAL eine Stream-Kombination erfolgreich validiert hat. Um Probleme zu vermeiden, stellen Sie sicher, dass die Implementierung während Stream-Kombinationsabfragen keine Informationen speichert, ihren internen Status ändert oder zeitaufwändige Vorgänge durchführt.

Validierung

Um diese Funktion zu validieren, führen Sie die folgenden Kamera-CTS- und VTS-Testfälle aus:

Kamera-CTS-Module:

Kamera VTS:

VtsHalCameraProviderV2_4TargetTest.cpp