Die Camera Hardware Abstraction Layer (HAL) von Android verbindet die APIs des Kamera-Frameworks auf höherer Ebene in android.hardware.camera2 mit dem zugrunde liegenden Kameratreiber und der Hardware. Ab Android 13 wird für die Entwicklung von Kamera-HAL-Schnittstellen AIDL verwendet. Mit Android 8.0 wurde Treble eingeführt. Die Camera HAL API wurde auf eine stabile Schnittstelle umgestellt, die durch die HAL Interface Definition Language (HIDL) definiert wird. Wenn Sie zuvor ein Kamera-HAL-Modul und einen Treiber für Android 7.0 und niedriger entwickelt haben, sollten Sie sich über die erheblichen Änderungen in der Kamerapipeline informieren.
AIDL-Kamera-HAL
Für Geräte mit Android 13 oder höher unterstützt das Kamera-Framework AIDL-Kamera-HALs. Das Kamera-Framework unterstützt auch HIDL-Kamera-HALs. Kamerafunktionen, die in Android 13 oder höher hinzugefügt wurden, sind jedoch 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 HIDL-Kameraschnittstellen auf AIDL-Kameraschnittstellen umstellen.
Weitere Informationen zu den Vorteilen von AIDL finden Sie unter AIDL für HALs.
AIDL-Kamera-HAL implementieren
Eine Referenzimplementierung einer AIDL-Kamera-HAL finden Sie unter
hardware/google/camera/common/hal/aidl_service/
.
Die AIDL-Kamera-HAL-Spezifikationen befinden sich an den folgenden Speicherorten:
- Kameraanbieter:
hardware/interfaces/camera/provider/aidl/
- Kameragerät:
hardware/interfaces/camera/device/aidl/
- Kamerametadaten:
hardware/interfaces/camera/metadata/aidl/
- Gängige Datentypen:
hardware/interfaces/camera/common/aidl/
Bei Geräten, die auf AIDL migriert werden, müssen Gerätehersteller möglicherweise die Android-SELinux-Richtlinie (sepolicy) und RC-Dateien je nach Codestruktur ändern.
AIDL-Kamera-HAL validieren
Um Ihre AIDL-Kamera-HAL-Implementierung zu testen, muss das Gerät alle CTS- und VTS-Tests bestehen. Mit Android 13 wird der AIDL-VTS-Test eingeführt,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Camera HAL3-Funktionen
Ziel der Neugestaltung der Android Camera API ist es, die Möglichkeiten von Apps zur Steuerung des Kamerasubsystems auf Android-Geräten erheblich zu erweitern und gleichzeitig die API neu zu organisieren, um sie effizienter und wartungsfreundlicher zu machen. Durch die zusätzliche Steuerung ist es einfacher, hochwertige Kamera-Apps für Android-Geräte zu entwickeln, die auf mehreren Produkten zuverlässig funktionieren und gleichzeitig möglichst gerätespezifische Algorithmen verwenden, um Qualität und Leistung zu maximieren.
In Version 3 des Kamerasubsystems werden die Betriebsmodi in einer einzigen einheitlichen Ansicht strukturiert, mit der alle vorherigen Modi und mehrere andere Modi wie der Burst-Modus implementiert werden können. Das führt zu einer besseren Nutzerkontrolle für Fokus und Belichtung sowie zu mehr Nachbearbeitung, z. B. Rauschunterdrückung, Kontrast und Schärfen. Außerdem erleichtert diese vereinfachte Ansicht Anwendungsentwicklern die Nutzung der verschiedenen Funktionen der Kamera.
Die API modelliert das Kamerasubsystem als Pipeline, die eingehende Anfragen zum Erfassen von Frames im Verhältnis 1:1 in Frames umwandelt. Die Anfragen enthalten alle Konfigurationsinformationen zum Erfassen und Verarbeiten eines Frames. Dazu gehören Auflösung und Pixelformat, manuelle Steuerung von Sensor, Objektiv und Blitz, 3A-Betriebsmodi, RAW->YUV-Verarbeitungssteuerung und Statistikgenerierung.
Einfach ausgedrückt: Das Anwendungs-Framework fordert einen Frame vom Kamerasubsystem an und das Kamerasubsystem gibt Ergebnisse an einen Ausgabestream zurück. Außerdem werden für jeden Ergebnissatz Metadaten mit Informationen wie Farbräumen und Objektivschattierung generiert. Die Kameraversion 3 kann als Pipeline für den unidirektionalen Stream der Kameraversion 1 betrachtet werden. Jede Erfassungsanfrage wird in ein vom Sensor aufgenommenes Bild umgewandelt, das in Folgendes verarbeitet wird:
- Ein Ergebnisobjekt mit Metadaten zur Aufnahme.
- Ein bis N Puffer mit Bilddaten, jeweils auf einer eigenen Zieloberfläche.
Die Menge der möglichen Ausgabeflächen ist vorkonfiguriert:
- Jede Oberfläche ist ein Ziel für einen Stream von Bildpuffern mit einer festen Auflösung.
- Es können nur wenige Oberflächen gleichzeitig als Ausgaben konfiguriert werden (ca. 3).
Eine Anfrage enthält alle gewünschten Aufnahmeeinstellungen und die Liste der Ausgabeflächen, in die für diese Anfrage Bildpuffer übertragen werden sollen (aus der gesamten konfigurierten Menge). Eine Anfrage kann einmalig (mit capture()
) oder unbegrenzt wiederholt werden (mit setRepeatingRequest()
). Aufnahmen haben Vorrang vor sich wiederholenden Anfragen.

Abbildung 1: Betriebsmodell für den Kamerakern
Camera HAL1 – Übersicht
Version 1 des Kamerasubsystems wurde als Blackbox mit allgemeinen Steuerelementen und den folgenden drei Betriebsmodi konzipiert:
- Vorschau
- Video aufnehmen
- Standbildaufnahme
Jeder Modus hat leicht unterschiedliche und sich überschneidende Funktionen. Das hat es erschwert, neue Funktionen wie den Serienbildmodus zu implementieren, der zwischen zwei der Betriebsmodi liegt.

Abbildung 2: Kamerakomponenten
Android 7.0 unterstützt weiterhin Camera HAL1, da viele Geräte noch darauf angewiesen sind. Außerdem unterstützt der Android-Kameraservice die Implementierung beider HALs (1 und 3). Das ist nützlich, wenn Sie eine weniger leistungsfähige Frontkamera mit Kamera-HAL1 und eine fortschrittlichere Rückkamera mit Kamera-HAL3 unterstützen möchten.
Es gibt ein einzelnes Kamera-HAL-Modul (mit einer eigenen Versionsnummer), in dem mehrere unabhängige Kamerageräte aufgeführt sind, die jeweils eine eigene Versionsnummer haben. Für Geräte 2 oder höher ist das Kameramodul 2 oder höher erforderlich. Solche Kameramodule können eine Mischung aus Kameraversionsgeräten haben. Das bedeutet, dass Android die Implementierung beider HALs unterstützt.