Unterstützung mehrerer Kameras

Mit Android 9 wurde die API-Unterstützung für mehrere Kameras eingeführt. mit einer neuen logischen Kamera verbinden, die aus zwei oder mehr Kamerageräte, die in die gleiche Richtung zeigen. Das logische Kameragerät ist werden in einer App als ein einziges CameraDevice/CaptureSession dargestellt, sodass ihr Interaktion mit HAL-integrierten Multi-Kamera-Funktionen. Apps können optional Auf die zugrunde liegenden physischen Kamerastreams, Metadaten und Steuerelemente zugreifen und diese steuern

Unterstützung mehrerer Kameras

Abbildung 1: Unterstützung mehrerer Kameras

In diesem Diagramm sind verschiedene Kamera-IDs farblich gekennzeichnet. Die App kann von jeder physischen Kamera gleichzeitig streamen. Es ist auch separate Einstellungen festlegen und Metadaten von verschiedenen physische Kameras.

Beispiele und Quellen

Geräte mit mehreren Kameras müssen mit den logische Multikamera-Funktionen.

Kameraclients können die Kamera-ID der physischen Geräte eines bestimmten Geräts abfragen. eine logische Kamera erstellt, indem getPhysicalCameraIds() Die als Teil des Ergebnisses zurückgegebenen IDs werden dann zur Steuerung physischer Geräte verwendet. individuell durch setPhysicalCameraId() Die Ergebnisse aus solchen Einzelanfragen können aus dem gesamten durch Aufrufen von getPhysicalCameraResults()

Bei einzelnen Anfragen für physische Kameras wird möglicherweise nur eine begrenzte Anzahl von Parameter. Um eine Liste der unterstützten Parameter zu erhalten, können Entwickler Folgendes aufrufen: getAvailablePhysicalCameraRequestKeys()

Streams von physischen Kameras werden nur für Anfragen unterstützt, die nicht erneut verarbeitet werden. nur für monochrome und Bayer-Sensoren.

Implementierung

Support-Checkliste

So fügen Sie logische Mehrfachkamera-Geräte auf der HAL-Seite hinzu:

Für Geräte mit Android 9 müssen Kamerageräte einen logischen YUV/RAW-Stream durch physische Streams des gleich groß (gilt nicht für RAW-Streams) und dasselbe Format von zwei physischen Kameras. Dies gilt nicht für Geräte mit Android 10.

Für Geräte mit Android 10, bei denen die Kamera-HAL-Geräteversion ist 3,50 oder höher muss die Kamera isStreamCombinationSupported können Apps abfragen, ob eine bestimmte Streamkombination mit physische Streams werden unterstützt.

Stream-Konfigurationskarte

Bei einer logischen Kamera sind die obligatorischen Stream-Kombinationen für das Kameragerät von Hardwareebene entspricht den Anforderungen in CameraDevice.createCaptureSession Alle Streams in der Streamkonfigurationszuordnung müssen logische Streams sein.

Für ein logisches Kameragerät, das RAW-Unterstützung mit physischen Unterkameras unterstützt konfiguriert eine App einen logischen RAW-Stream, Das logische Kameragerät darf nicht auf Unterkameras mit unterschiedlichen Sensorgrößen. Dadurch wird sichergestellt, dass vorhandene RAW-Aufnahme-Apps weiterhin funktionieren.

Um den von HAL implementierten optischen Zoom zu nutzen, indem Sie zwischen mit Unterkameras verwenden, müssen Apps physische Streams von Unterkameras statt logischer RAW-Streams konfigurieren

Kombination aus garantiertem Stream

Sowohl die logische Kamera als auch die zugrunde liegenden physischen Kameras müssen erforderliche Stream-Kombinationen die für ihr jeweiliges Gerät erforderlich sind.

Eine logische Kamera sollte genauso funktionieren wie eine physische Kamera des Hardware-Levels und der Funktionen anpassen. Es wird empfohlen, ist eine Obermenge der einzelnen physischen Kameras.

Auf Geräten mit Android 9 für jeden garantierten kann die logische Kamera Folgendes unterstützen:

  • Ein logischer YUV_420_888 oder Rohstream wird durch zwei physische Streams von gleich groß und gleich aufgebaut sind, aus einer separaten physischen Kamera herauszuholen, dass die Größe und das Format von den physischen Kameras unterstützt werden.

  • Hinzufügen von zwei Rohstreams – einer von jeder physischen Kamera –, wenn die logische Kamera wirbt nicht für RAW-Funktionen, die zugrunde liegenden physischen Kameras jedoch schon. Dies tritt normalerweise auf, wenn die physischen Kameras unterschiedliche Sensorgrößen haben.

  • Die Verwendung physischer Streams anstelle eines logischen Streams derselben Größe und Format. Die Framerate der Aufnahme darf dadurch nicht verlangsamt werden, wenn das Die minimale Frame-Dauer der physischen und logischen Streams ist identisch.

Überlegungen zu Leistung und Leistung

  • Leistung:

    • Das Konfigurieren und Streamen physischer Streams kann Aufnahmerate logischer Kamera aufgrund von Ressourceneinschränkungen.
    • Das Anwenden der Einstellungen einer physischen Kamera kann die Aufnahmerate verlangsamen, wenn das Kameras mit unterschiedlichen Frame-Rates
  • Stromversorgung:

    • Die Leistungsoptimierung von HAL funktioniert auch im Standardfall weiterhin.
    • Durch das Konfigurieren oder Anfordern von physischen Streams können die internen HAL-Streams überschrieben werden. Stromoptimierung und erhöhten Stromverbrauch.

Personalisierung

Sie können die Geräteimplementierung auf folgende Arten anpassen.

  • Die fusionierte Ausgabe des logischen Kamerageräts hängt vollständig vom HAL ab Implementierung. Die Entscheidung, wie zusammengeführte logische Streams aus Die physischen Kameras sind für die App und die Android-Kamera transparent. Framework.
  • Optional können einzelne physische Anfragen und Ergebnisse unterstützt werden. Die der verfügbaren Parameter in solchen Anfragen auch vollständig von der spezifischen HAL-Implementierung.
  • Ab Android 10 kann der HAL die Anzahl der Kameras, die direkt von einer App geöffnet werden können, indem sie einige oder alle PHYSICAL_IDs anbieten in getCameraIdList getPhysicalCameraCharacteristics wird angerufen die Eigenschaften der physischen Kamera zurückgeben.

Zertifizierungsstufe

Logische Geräte mit mehreren Kameras müssen die CTS der Kamera wie jede andere normale Kamera passieren. Die Testläufe, die auf diesen Gerätetyp ausgerichtet sind, findest du in der LogicalCameraDeviceTest -Modul.

Diese drei ITS-Tests zielen auf Systeme mit mehreren Kameras ab, um die ordnungsgemäße Durchführung Verschmelzen von Bildern:

Die Tests für Szene 1 und 4 werden mit dem ITS-in-a-box-Test Rig. Der test_multi_camera_match-Test bestätigt, dass die Helligkeit des Mitte der Bilder stimmt überein, wenn beide Kameras aktiviert sind. Die Der test_multi_camera_alignment-Test bestätigt, dass Kameraabstände, -ausrichtungen und Verzerrungsparameter richtig geladen sind. Wenn das Mehrkamerasystem eine Weitwinkelkamera (> 90°) enthält, ist die rev2-Version der ITS-Box erforderlich.

Sensor_fusion ist ein zweiter Prüfstand, der die Verwendung wiederholter, vorgeschriebener Smartphones ermöglicht und dass die Zeitstempel von Gyroskop und Bildsensor übereinstimmen dass die Frames mit mehreren Kameras synchron sind.

Alle Verpackungen sind über AcuSpec, Inc. erhältlich. (www.acuspecinc.com, fred@acuspecinc.com) und MYWAY Produktion/Fertigung (www.myway.tw, sales@myway.tw). Außerdem kann die rev1 ITS-Box über West-Mark erworben werden. (www.west-mark.com, dgoodman@west-mark.com).

Best Practices

Um die Funktionen, die durch mehrere Kameras möglich sind, in vollem Umfang zu nutzen und gleichzeitig App-Kompatibilität empfehlen, befolgen Sie diese Best Practices bei der Implementierung einer logischen Gerät mit mehreren Kameras:

  • (Android 10 oder höher) Physische Unterkameras ausblenden getCameraIdList Dadurch wird die Anzahl der Kameras reduziert, die direkt geöffnet werden können. Apps, sodass Apps keine komplexe Kameraauswahllogik haben müssen.
  • (Android 11 oder höher) Für logische Mehrfachkameras Gerät, das den optischen Zoom unterstützt, implementieren Sie die ANDROID_CONTROL_ZOOM_RATIO API und ANDROID_SCALER_CROP_REGION verwenden nur für das Zuschneiden des Seitenverhältnisses. ANDROID_CONTROL_ZOOM_RATIO kann das Gerät herauszoomen und eine bessere Präzision erzielen. In diesem Fall Der HAL muss das Koordinatensystem von ANDROID_SCALER_CROP_REGION anpassen. ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS ANDROID_STATISTICS_FACE_RECTANGLES, und ANDROID_STATISTICS_FACE_LANDMARKS die nach dem Zoomen als Sensor-Active-Array angegeben. Weitere Informationen dazu, wie Sie ANDROID_SCALER_CROP_REGION funktioniert zusammen mit ANDROID_CONTROL_ZOOM_RATIO, siehe camera3_crop_reprocess#cropping.
  • Für Geräte mit mehreren Kameras und physischen Kameras, die unterschiedlich sicherstellen, dass das Gerät einen bestimmten Wert unterstützt, oder Bereich für ein Steuerelement, wenn der gesamte Zoombereich den Wert unterstützt oder Bereich. Besteht die Kamera beispielsweise aus einem Ultraweitwinkelobjektiv, Weitwinkel- und Teleobjektiv: <ph type="x-smartling-placeholder">
      </ph>
    • Wenn die aktiven Array-Größen der physischen Kameras unterschiedlich sind, Kamera-HAL muss die Zuordnung der aktiven Arrays der physischen Kameras zu das logische Kamera-Active Array für ANDROID_SCALER_CROP_REGION ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS ANDROID_STATISTICS_FACE_RECTANGLES, und ANDROID_STATISTICS_FACE_LANDMARKS damit aus Sicht der App Koordinatensystem ist die aktive Array-Größe der logischen Kamera.
    • Wenn die Weitwinkel- und Teleobjektivkameras Autofokus unterstützen, aber die Ultraweitwinkelkamera Kamera ist fixiert. Achten Sie darauf, dass die logische Kamera den Autofokus bewirbt. Support. Der HAL muss einen Autofokus-Zustandsautomaten für das Ultraweitwinkelobjektiv simulieren, Wenn die App auf das Ultraweitwinkelobjektiv herauszoomt, Der Fixfokus der zugrunde liegenden Kamera ist für die App transparent. und die Autofokus-Autofokusmaschine für die unterstützten AF-Modi wie zu erwarten war.
    • Wenn die Weitwinkel- und Teleobjektiv 4K bei 60 fps unterstützen und das Die Ultraweitwinkelkamera unterstützt nur 4K bei 30 fps oder 1080p bei 60 fps, aber nicht 4K bei 60 fps, achten Sie darauf, dass die logische Kamera keine 4K-Auflösung 60 fps bei den unterstützten Streamkonfigurationen. Dadurch wird die Integrität der logischen Kamerafunktionen, durch die sichergestellt wird, dass die App dass Sie 4K bei 60 fps nicht erreichen, ANDROID_CONTROL_ZOOM_RATIO kleiner als 1 ist.
  • Android 10, ein logisches Multi-Kamera-System ist nicht erforderlich, um Streamkombinationen mit physischen Streams zu unterstützen. Wenn der HAL eine Kombination mit physischen Streams unterstützt: <ph type="x-smartling-placeholder">
      </ph>
    • (Android 11 oder höher) Zur besseren Handhabung wie Tiefe von Stereo und Bewegungserkennung, sorgen dafür, dass das Sichtfeld der Ausgabe des physischen Streams so groß wie die Hardware erreicht werden kann. Stammen ein physischer und ein logischer Stream jedoch Kamera verwenden, können Hardwareeinschränkungen das Sichtfeld des Geräts physischer Stream mit dem logischen Stream identisch sein muss.
    • Um die durch mehrere physische Streams verursachte Speicherauslastung zu verringern, Achten Sie darauf, dass Apps discardFreeBuffers verwenden um die Zuweisung der kostenlosen Puffer (Puffer, die vom Verbraucher freigegeben werden, aber noch nicht vom Produzenten aus der Warteschlange entfernt), wenn erwartet wird, dass ein physischer Stream eine Zeit lang inaktiv war.
    • Wenn Streams von verschiedenen physischen Kameras in der Regel nicht die mit derselben Anfrage verknüpft sind, müssen die Apps surface group verwenden. sodass eine Zwischenspeicherwarteschlange verwendet wird, um zwei Oberflächen, die auf die App ausgerichtet sind, und reduziert den Arbeitsspeicherverbrauch.