Stream-Konfigurationen

Android 10 führt Funktionen ein, mit denen Kamera-Clients optimale Kamera-Streams für bestimmte Anwendungsfälle auswählen und sicherstellen können, 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 Sätze von Streams, 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 anbieterseitige Referenzimplementierung der empfohlenen Konfigurationsstreams und der API zum Abfragen von Streamkombinationsfunktionen. 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 dabei helfen, optimale Konfigurationen auszuwählen.

Obwohl StreamConfigurationMap den Kamera-Clients umfassende Stream-Konfigurationsinformationen bereitstellt, enthält es keine Informationen über die Effizienz, Leistung oder Leistungsauswirkungen der Auswahl eines Streams gegenüber einem anderen. Kamera-Clients können aus allen möglichen Stream-Konfigurationen frei wählen, aber in vielen Fällen führt dies dazu, dass Clients suboptimale Kamerakonfigurationen verwenden und Anwendungen zeitraubende, erschöpfende Suchen 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 die Formate. Dies führt zu einem zusätzlichen Verarbeitungsdurchlauf für die Formatumwandlung und reduziert die Effizienz. Die Größe und das entsprechende Seitenverhältnis können ebenfalls einen ähnlichen Einfluss haben, wodurch bestimmte Abmessungen in Bezug auf Leistung und Leistung bevorzugt werden.

Ihre empfohlenen Stream-Konfigurationszuordnungen müssen im Vergleich zu StreamConfigurationMap nicht vollständig sein. Die vorgeschlagenen Konfigurationszuordnungen 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. Ausgeblendete Formate, Größen oder andere Werte, die nicht in StreamConfigurationMap gefunden werden, können nicht in empfohlene Stream-Konfigurationszuordnungen aufgenommen werden.

Alle Tests bleiben unverändert und werden je nach 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 von Stream-Konfigurationen für bestimmte Anwendungsfälle. Die Deklaration verwendet einfache Bitmaps, die die vorgeschlagenen Anwendungsfälle in Form von [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 Bits im Bereich [PUBLIC_END, VENDOR_START] sind verboten.

    Diese Informationen werden im availableRecommendedStreamConfigurations -Metadaten-Tag 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, aber nur 1080p für die Vorschau vorgeschlagen 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 Tiefendatenraum-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 von empfohlenen Bildformaten, 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 RecommendedStreamConfigurationMap -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 Konfigurationen verarbeiteter Streams enthalten, die nicht zum Stillstand kommen, mit Ausgabeformaten wie YUV_420_888 und IMPLEMENTATION_DEFINED .
RECORD Ein Videodatensatz muss Stream-Konfigurationen enthalten, die den beworbenen unterstützten Medienprofilen mit dem Format IMPLEMENTATION_DEFINED IMPLEMENTATION_DEFINED .
VIDEO_SNAPSHOT Ein Video-Schnappschuss muss Stream-Konfigurationen enthalten, die mindestens so groß sind wie die maximalen RECORD-Auflösungen und nur mit der BLOB + DATASPACE_JFIF-Format/Datenraum-Kombination (JPEG). Die Konfigurationen sollten keine Vorschaufehler 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 BLOB + DATASPACE_JFIF-Format/Datenraum-Kombination (JPEG) enthalten. Unter Berücksichtigung von Einschränkungen hinsichtlich Seitenverhältnis, Ausrichtung und anderen herstellerspezifischen Einschränkungen sollte die Fläche der empfohlenen Maximalgröße nicht weniger als 97 % der Sensorarray-Größenfläche betragen.
ZSL (falls unterstützt) Sofern vom Kameragerät unterstützt, dürfen empfohlene Eingabestromkonfigurationen nur zusammen mit anderen verarbeiteten oder blockierenden Ausgabeformaten angekündigt werden.
RAW (falls unterstützt) Sofern vom Kameragerät unterstützt, dürfen die empfohlenen Raw-Stream-Konfigurationen nur RAW-basierte Ausgabeformate enthalten.

Andere Anwendungsfälle

Sie können zusätzliche empfohlene Konfigurationsstreams für spezifische Anwendungsfälle Ihrer Implementierung bereitstellen.

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 jederzeit sicher abfragen, nachdem sie eine gültige CameraDevice- Instanz erhalten haben, wodurch der Aufwand für die Initialisierung einer Kameraaufnahmesitzung und das Potenzial nachfolgender Kameraausnahmen, einschließlich Kamerabruch, beseitigt und schnellere Abfragen ermöglicht werden.

Diese Funktion ermöglicht es Kamera-Clients auch, eine Liste von Stream-Kombinationen zu erhalten, die gemäß den Richtlinien für CameraDevice und dem unterstützten HW-Level zusammengestellt wurde. CTS-Tests sind verfügbar, um die Korrektheit von Abfrageergebnissen so weit wie möglich zu erzwingen und eine kleine Teilmenge der häufigsten 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 isStreamCombinationSupported -API-Schnittstelle isStreamCombinationSupported bereitstellen. Diese Schnittstelle prüft, ob das Kameragerät eine bestimmte Kamerastream-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 der 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 Zustand ä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