Kamera HAL3

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. Android 8.0 führte Treble ein und stellte die CameraHal-API auf eine stabile Schnittstelle um, die von der HAL Interface Description Language (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.

Funktionen der Kamera HAL3

Das Ziel der Neugestaltung der Android-Kamera-API ist es, die Fähigkeit von Anwendungen 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 Kameraanwendungen auf Android-Geräten, die zuverlässig über mehrere Produkte hinweg funktionieren und dennoch nach Möglichkeit 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 seiner eigenen Zieloberfläche.

Der Satz möglicher Ausgabeoberflächen ist vorkonfiguriert:

  • Jede Oberfläche ist ein Ziel für einen Strom von Bildpuffern mit fester Auflösung.
  • Nur eine kleine Anzahl von Oberflächen kann 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 insgesamt konfigurierten Satz). Eine Anfrage kann einmalig sein (mit capture() ) oder unendlich wiederholt werden (mit setRepeatingRequest() ). Erfassungen haben Vorrang vor wiederholten Anfragen.

Kameradatenmodell

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 fällt.

Blockschaltbild der Kamera

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).