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
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ügen Sie ein
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
für logische Kamerageräte mit zwei oder mehr physischen Kameras, die auch einer App ausgesetzt sind. - Statischen Wert einfügen
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
metadata-Feld mit einer Liste der IDs physischer Kameras. - Die tiefenbezogenen statischen Metadaten füllen, die für die Korrelation zwischen
streamt physische Kamera Pixel:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
ANDROID_LENS_POSE_REFERENCE
. Statischen Wert festlegen
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
Metadaten-Feld:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Bei Sensoren im Haupt-Hauptmodus ist keine Hardwaresynchronisierung mit Auslöser und Belichtung möglich.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Für Sensoren im Haupt-Sekundärmodus: Hardware-Auslöser/Belichtungssynchronisierung.
Ausfüllen
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
durch eine Liste der unterstützten Parameter für einzelne physische Kameras. Die Die Liste kann leer sein, wenn das logische Gerät keine einzelnen Anfragen unterstützt.Wenn einzelne Anfragen unterstützt werden, verarbeiten und anwenden
physicalCameraSettings
die im Rahmen von Erfassungsanfragen eintreffen können.physicalCameraMetadata
entsprechend anpassen.Für Kamera-HAL-Geräteversionen 3.5 (Einführung in Android 10) oder höher, füllen Sie
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
mit der ID der aktuell aktiven physischen Kamera, die den logische Kamera.
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:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
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 undANDROID_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 vonANDROID_SCALER_CROP_REGION
anpassen.ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
ANDROID_STATISTICS_FACE_RECTANGLES
, undANDROID_STATISTICS_FACE_LANDMARKS
die nach dem Zoomen als Sensor-Active-Array angegeben. Weitere Informationen dazu, wie SieANDROID_SCALER_CROP_REGION
funktioniert zusammen mitANDROID_CONTROL_ZOOM_RATIO
, siehecamera3_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
, undANDROID_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.
- 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 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.