Die Kamera-Hardware-Abstraktionsschicht (HAL) von Android verbindet die übergeordneten Kamera-Framework-APIs in android.hardware.camera2 mit Ihrem zugrunde liegenden Kameratreiber und Ihrer zugrunde liegenden Hardware. Ab Android 13 verwendet die Kamera-HAL-Schnittstellenentwicklung AIDL . Android 8.0 führte Treble ein und stellte die Kamera-HAL-API auf eine stabile Schnittstelle um, die von der HAL-Schnittstellenbeschreibungssprache (HIDL) definiert wird. Wenn Sie bereits ein Kamera-HAL-Modul und einen Treiber für Android 7.0 und niedriger entwickelt haben, beachten Sie die erheblichen Änderungen in der Kamera-Pipeline.
AIDL-Kamera HAL
Für Geräte mit Android 13 oder höher enthält das Kamera-Framework Unterstützung für AIDL-Kamera-HALs. Das Kamera-Framework unterstützt auch HIDL-Kamera-HALs, jedoch sind Kamerafunktionen, die in Android 13 oder höher hinzugefügt wurden, nur über die AIDL-Kamera-HAL-Schnittstellen verfügbar. Um solche Funktionen auf Geräten zu implementieren, die auf Android 13 oder höher aktualisiert werden, müssen Gerätehersteller ihren HAL-Prozess von der Verwendung von HIDL-Kameraschnittstellen zu AIDL-Kameraschnittstellen migrieren.
Informationen zu den Vorteilen von AIDL finden Sie unter AIDL für HALs .
Implementieren Sie die AIDL-Kamera HAL
Eine Referenzimplementierung einer AIDL-Kamera-HAL finden Sie unter hardware/google/camera/common/hal/aidl_service/
.
Die HAL-Spezifikationen der AIDL-Kamera befinden sich an den folgenden Stellen:
- Kameraanbieter:
hardware/interfaces/camera/provider/aidl/
- Kameragerät:
hardware/interfaces/camera/device/aidl/
- Kamera-Metadaten:
hardware/interfaces/camera/metadata/aidl/
- Gängige Datentypen:
hardware/interfaces/camera/common/aidl/
Für Geräte, die zu AIDL migrieren, müssen Gerätehersteller je nach Codestruktur möglicherweise die Android-SELinux-Richtlinie (sepolicy) und die RC-Dateien ändern.
Validieren Sie die HAL der AIDL-Kamera
Stellen Sie zum Testen der HAL-Implementierung Ihrer AIDL-Kamera sicher, dass das Gerät alle CTS- und VTS-Tests besteht. Android 13 führt den AIDL VTS-Test VtsAidlHalCameraProvider_TargetTest.cpp
.
Funktionen der Kamera HAL3
Das Ziel der Neugestaltung der Android-Kamera-API ist es, die Fähigkeit von Apps zur Steuerung des Kamera-Subsystems auf Android-Geräten erheblich zu verbessern und gleichzeitig die API neu zu organisieren, um sie effizienter und wartbarer zu machen. Die zusätzliche Steuerung erleichtert das Erstellen hochwertiger Kamera-Apps auf Android-Geräten, die zuverlässig über mehrere Produkte hinweg funktionieren und gleichzeitig, wann immer möglich, gerätespezifische Algorithmen verwenden, um Qualität und Leistung zu maximieren.
Version 3 des Kamera-Subsystems strukturiert die Betriebsmodi in einer einzigen einheitlichen Ansicht, die verwendet werden kann, um jeden der vorherigen Modi und mehrere andere, wie z. B. den Burst-Modus, zu implementieren. Dies führt zu einer besseren Benutzersteuerung für Fokus und Belichtung und zu mehr Nachbearbeitung wie Rauschunterdrückung, Kontrast und Schärfe. Darüber hinaus erleichtert diese vereinfachte Ansicht Anwendungsentwicklern die Verwendung der verschiedenen Funktionen der Kamera.
Die API modelliert das Kamera-Subsystem als eine Pipeline, die eingehende Anforderungen für Frame-Erfassungen auf einer 1:1-Basis in Frames umwandelt. Die Anforderungen kapseln alle Konfigurationsinformationen über die Erfassung und Verarbeitung eines Frames. Dazu gehören Auflösung und Pixelformat; manuelle Sensor-, Objektiv- und Blitzsteuerung; 3A-Betriebsarten; RAW->YUV-Verarbeitungskontrolle; Erstellung von Statistiken; usw.
Einfach ausgedrückt fordert das Anwendungs-Framework einen Frame vom Kamera-Subsystem an, und das Kamera-Subsystem gibt Ergebnisse an einen Ausgabestrom zurück. Außerdem werden für jeden Ergebnissatz Metadaten generiert, die Informationen wie Farbräume und Linsentönung enthalten. Sie können sich Kameraversion 3 als eine Pipeline zum unidirektionalen Stream von Kameraversion 1 vorstellen. Es wandelt jede Aufnahmeanforderung in ein vom Sensor aufgenommenes Bild um, das verarbeitet wird zu:
- Ein Ergebnisobjekt mit Metadaten zur Erfassung.
- Ein bis N Puffer von Bilddaten, jeder in seine eigene Zieloberfläche.
Die Menge der möglichen Ausgabeflächen ist vorkonfiguriert:
- Jede Oberfläche ist ein Ziel für einen Strom von Bildpuffern mit fester Auflösung.
- Es kann nur eine kleine Anzahl von Oberflächen gleichzeitig als Ausgänge konfiguriert werden (~3).
Eine Anforderung enthält alle gewünschten Erfassungseinstellungen und die Liste der Ausgabeoberflächen, in die Bildpuffer für diese Anforderung verschoben werden sollen (aus dem gesamten konfigurierten Satz). Eine Anfrage kann einmalig sein (mit capture()
) oder unendlich wiederholt werden (mit setRepeatingRequest()
). Erfassungen haben Vorrang vor wiederholten Anfragen.

Abbildung 1. Betriebsmodell des Kamerakerns
Kamera HAL1 Übersicht
Version 1 des Kamera-Subsystems wurde als Blackbox mit übergeordneten Bedienelementen und den folgenden drei Betriebsmodi konzipiert:
- Vorschau
- Videoaufnahme
- Immer noch erfassen
Jeder Modus hat leicht unterschiedliche und sich überschneidende Fähigkeiten. Dies machte es schwierig, neue Funktionen wie den Burst-Modus zu implementieren, der zwischen zwei der Betriebsmodi liegt.

Abbildung 2. Kamerakomponenten
Android 7.0 unterstützt weiterhin die Kamera HAL1, da viele Geräte immer noch darauf angewiesen sind. Darüber hinaus unterstützt der Android-Kameradienst die Implementierung beider HALs (1 und 3), was nützlich ist, wenn Sie eine weniger leistungsfähige nach vorne gerichtete Kamera mit Kamera HAL1 und eine fortschrittlichere nach hinten gerichtete Kamera mit Kamera HAL3 unterstützen möchten.
Es gibt ein einzelnes Kamera-HAL -Modul (mit eigener Versionsnummer ), das mehrere unabhängige Kamerageräte auflistet, die jeweils ihre eigene Versionsnummer haben. Kameramodul 2 oder neuer ist erforderlich, um Geräte 2 oder neuer zu unterstützen, und solche Kameramodule können eine Mischung aus Kamerageräteversionen haben (das meinen wir, wenn wir sagen, dass Android die Implementierung beider HALs unterstützt).