Streamkonfigurationen

Android bietet Funktionen, mit denen Kamera-Clients optimale 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, und eine Streamkombination bezieht sich auf einen oder mehrere Sätze von Streams, die auf dem Kameragerät konfiguriert sind. Weitere Informationen zu diesen Funktionen finden Sie unter Empfohlene Streamkonfigurationen und API zum Abfragen von Funktionskombinationen.

Referenzimplementierung

Es gibt eine Referenzimplementierung der empfohlenen Konfigurationsstreams und der API zum Abfragen von Funktionen für Streamkombinationen auf Anbieterseite. Sie finden diese Implementierung unter QCamera3HWI.cpp.

Kameraanbieter können Kamera-Clients empfohlene Streamkonfigurationen für bestimmte Anwendungsfälle präsentieren. Diese empfohlenen Streamkonfigurationen, die Teilmengen von StreamConfigurationMap sind, können Kameraclienten dabei helfen, optimale Konfigurationen auszuwählen.

StreamConfigurationMap bietet zwar umfassende Informationen zur Streamkonfiguration für Kameraclienten, aber keine Informationen zu den Auswirkungen der Auswahl eines Streams gegenüber einem anderen auf Effizienz, Stromverbrauch oder Leistung. Kameraclienten können frei aus allen möglichen Streamkonfigurationen auswählen. In vielen Fällen führt dies jedoch dazu, dass Clients suboptimale Kamerakonfigurationen verwenden und Apps zeitaufwendige, erschöpfende Suchvorgänge durchführen.

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

Die empfohlenen Streamkonfigurationszuordnungen müssen nicht so umfassend sein wie die StreamConfigurationMap. Die vorgeschlagenen Konfigurationszuordnungen müssen den Anforderungen im Abschnitt Implementierung entsprechen und können beliebige der verfügbaren Formate, Größen oder anderen Werte aus StreamConfigurationMap enthalten. Ausgeblendete Formate, Größen oder andere Werte, die nicht in StreamConfigurationMap gefunden werden, können nicht in empfohlene Streamkonfigurationszuordnungen aufgenommen werden.

Alle Tests bleiben unverändert und werden nicht gelockert, je nach den empfohlenen Streamkonfigurationen.

Die von der Kameraimplementierung bereitgestellten empfohlenen Streamkonfigurationen sind optional und der Kameraclient kann sie ignorieren.

Implementierung

So implementieren Sie diese Funktion:

Metadateneinträge

Damit diese Funktion aktiviert werden kann, muss die Kamera-HAL die folgenden statischen Metadateneinträge ausfüllen:

  • android.scaler.availableRecommendedStreamConfigurations: Die empfohlene Teilmenge von Streamkonfigurationen für bestimmte Anwendungsfälle. In der Deklaration 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 verboten.

    Diese Informationen werden im Metadatentag availableRecommendedStreamConfigurations gespeichert.

    Das folgende Beispiel zeigt ein Array für eine empfohlene Streamkonfiguration für ein Kameragerät, das nur 4K und 1080p unterstützt. Beide Auflösungen werden für die Videoaufzeichnung bevorzugt, aber nur 1080p wird für die Vorschau vorgeschlagen.

    [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, die für dieses Kameragerät vorgeschlagen werden. Ähnlich wie beim oben genannten Metadateneintrag gibt eine zusätzliche Bitmap mit Anwendungsfällen die vorgeschlagenen Anwendungsfälle an.

    Diese Informationen werden im Metadatentag 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 Metadatentag 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 angegeben werden, die den entsprechenden Anforderungen entsprechen:

Anwendungsbeispiel Anforderung
PREVIEW Eine Vorschau darf nur verarbeitete Streamkonfigurationen ohne Stoppen mit Ausgabedatenformaten wie YUV_420_888 und IMPLEMENTATION_DEFINED enthalten.
RECORD Ein Video muss Streamkonfigurationen enthalten, die den beworbenen unterstützten Medienprofilen im IMPLEMENTATION_DEFINED-Format entsprechen.
VIDEO_SNAPSHOT Ein Video-Snapshot muss Streamkonfigurationen enthalten, die mindestens so groß sind wie die maximalen RECORD-Auflösungen, und nur mit der BLOB- + DATASPACE_JFIF-Format-/Dataspace-Kombination (JPEG). Die Konfigurationen sollten keine Vorschaufehler verursachen und mit 30 fps ausgeführt werden können.
SNAPSHOT Snapshot-Streamkonfigurationen müssen mindestens eine mit einer Größe enthalten, die android.sensor.info.activeArraySize mit der BLOB- und DATASPACE_JFIF-Format-/Dataspace-Kombination (JPEG) entspricht. Unter Berücksichtigung von Einschränkungen hinsichtlich des Seitenverhältnisses, der Ausrichtung und anderer anbieterspezifischer Einschränkungen sollte die Fläche der maximal empfohlenen Größe mindestens 97% der Fläche des Sensor-Arrays betragen.
ZSL (falls unterstützt) Wenn das Kameragerät dies unterstützt, dürfen empfohlene Eingabestreamkonfigurationen nur zusammen mit anderen verarbeiteten oder verzögerten Ausgabestreamformaten beworben werden.
RAW (falls unterstützt) Wenn das Kameragerät dies unterstützt, dürfen empfohlene Rohdatenstream-Konfigurationen nur auf RAW basierende 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 Funktionskombinationen

Ab Android 15 bietet die Android-Plattform eine API zum Abfragen von Funktionskombinationen. Mit dieser API können Kameraclienten abfragen, ob eine bestimmte Kombination von Funktionen vom Gerät unterstützt werden kann. Diese API ist erforderlich, da in der Camera2 API verschiedene Funktionen wie 4K, 60 fps, HDR-Video, Ultra-HDR, Ultraweitwinkel-Zoom und Stabilisierung als orthogonale Steuerelemente modelliert werden.

Voraussetzungen

Damit die API zum Abfragen von Funktionskombinationen unterstützt wird, muss in der Kamera-HAL Version 3 der ICameraDevice-Schnittstelle implementiert sein. Weitere Informationen finden Sie im Abschnitt Implementierung.

Wenn die API unterstützt wird, muss die Stabilisierung der Vorabversion orthogonal zu anderen Funktionen sein. Das bedeutet, dass für ein Kameragerät, das die Vorschau-Stabilisierung unterstützt, der Rückgabewert von isStreamCombinationWithSettingsSupported für eine bestimmte Kombination derselbe Wert sein muss, unabhängig davon, ob die Vorschau-Stabilisierung aktiviert oder deaktiviert ist. Dadurch wird der Suchraum für Anfragen zu Merkmalskombinationen reduziert.

Außerdem muss die primäre Rückkamera für die Media Performance Class 15 die Vorschau-Stabilisierung mit 10-Bit-HLG10-Vorschau für 1080p- und 720p-Vorschau sowie JPEGs in maximaler Größe unterstützen. Weitere Informationen zu diesen Anforderungen finden Sie im Abschnitt 2.2.7.2. Kamera des CDD.

Implementierung

Damit die API zum Abfragen von Featurekombinationen unterstützt wird, müssen Sie die folgenden APIs zum Abfragen von Featurekombinationen in Version 3 von ICameraDevice implementieren:

Bei Versionen vor Version 3 der ICameraDevice-Schnittstelle sollte im HAL die Methode isStreamCombinationSupported implementiert werden.

Weitere Informationen zu den von der API abgefragten Featurekombinationen 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 Funktionskombinationen für das Gerät abzufragen:

  • CameraDevice.CameraDeviceSetup: Eine eingeschränkte Darstellung von CameraDevice, mit der Featurekombinationen abgefragt werden können, ohne dass eine CameraDevice-Instanz erforderlich ist.

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

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Unterstützt Anfragen zu Featurekombinationen, wenn dieser Wert VANILLA_ICE_CREAM oder höher ist.

  • OutputConfiguration: Eine Klasse, die die Kameraausgabe beschreibt. Sie kann eine verzögerte Oberfläche für Anfragen zur Kombination von Funktionen mit geringer Latenz enthalten.

  • SessionConfiguration: Eine Hilfsklasse, die die Sitzungskonfiguration einschließlich Streamkombinationen und Sitzungsparameter beschreibt, die für Anfragen mit Featurekombinationen verwendet werden kann.

Zertifizierungsstufe

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

VTS

CTS

Camera ITS