camera3_capture_result Strukturreferenz

camera3_capture_result Strukturreferenz

#include < camera3.h >

Datenfelder

uint32_t Rahmennummer
const camera_metadata_t * Ergebnis
uint32_t num_output_buffers
const camera3_stream_buffer_t * Ausgabepuffer
const camera3_stream_buffer_t * input_buffer
uint32_t partielles_Ergebnis

detaillierte Beschreibung

camera3_capture_result_t:

Das Ergebnis einer einzelnen Erfassung/Neuverarbeitung durch das Kamera-HAL-Gerät. Dies wird asynchron mit „process_capture_result()“ an das Framework gesendet, als Reaktion auf eine einzelne Erfassungsanforderung, die mit „process_capture_request()“ an die HAL gesendet wird. Für jede Anforderung können von der HAL mehrere Aufrufe von „process_capture_result()“ ausgeführt werden.

Jeder Aufruf, alle mit derselben Frame-Nummer, kann eine Teilmenge der Ausgabepuffer und/oder die Ergebnismetadaten enthalten. Die Metadaten dürfen für eine bestimmte Frame-Nummer nur einmal bereitgestellt werden; Alle anderen Aufrufe müssen die Ergebnismetadaten auf NULL setzen.

Die Ergebnisstruktur enthält die Ausgabemetadaten dieser Erfassung und den Satz von Ausgabepuffern, die für diese Erfassung gefüllt wurden/werden. Jeder Ausgabepuffer kann mit einem Release-Sync-Fence ausgestattet sein, auf den das Framework vor dem Lesen wartet, falls der Puffer noch nicht von der HAL gefüllt wurde.

>= CAMERA_DEVICE_API_VERSION_3_2:

Die Metadaten können für eine einzelne Bildnummer mehrfach bereitgestellt werden. Das Framework akkumuliert den endgültigen Ergebnissatz, indem es jedes Teilergebnis zu einem Gesamtergebnissatz zusammenfügt.

Wenn in einer Anfrage ein Eingabepuffer angegeben wird, muss die HAL ihn in einem der Aufrufe von „process_capture_result“ zurückgeben, und der Aufruf kann darin bestehen, nur den Eingabepuffer ohne Metadaten und Ausgabepuffer zurückzugeben. Die Synchronisierungsgrenzen müssen auf die gleiche Weise gehandhabt werden wie für Ausgabepuffer.

Überlegungen zur Leistung:

Anwendungen erhalten diese Teilergebnisse auch sofort, daher ist das Senden von Teilergebnissen eine dringend empfohlene Leistungsoptimierung, um die gesamte Pipeline-Latenz zu vermeiden, bevor die Ergebnisse für das gesendet werden, was sehr früh in der Pipeline bekannt ist.

Ein typischer Anwendungsfall könnte die Berechnung des AF-Status in der Mitte der Pipeline sein; Indem wir den Status sofort an das Framework zurücksenden, erhalten wir eine Leistungssteigerung von 50 % und eine wahrgenommene Reaktionsfähigkeit des Autofokus.

Definition in Zeile 2251 der Datei camera3.h .

Felddokumentation

uint32_t Frame_Nummer

Die Frame-Nummer ist eine aufsteigende Ganzzahl, die vom Framework in der übermittelten Anfrage festgelegt wird, um diese Aufnahme eindeutig zu identifizieren. Es wird auch verwendet, um die Anfrage in asynchronen Benachrichtigungen zu identifizieren, die an camera3_callback_ops_t.notify() gesendet werden.

Definition in Zeile 2258 der Datei camera3.h .

const camera3_stream_buffer_t * input_buffer

>= CAMERA_DEVICE_API_VERSION_3_2:

Das Handle für den Eingabestreampuffer für diese Erfassung. Es ist möglicherweise noch nicht verbraucht, wenn die HAL „process_capture_result()“ aufruft. Das Framework wartet auf die von der HAL bereitgestellten Release-Synchronisierungsgrenzen, bevor es den Puffer wiederverwendet.

Die HAL sollte die Sync-Fences genauso behandeln wie für Output_buffers.

Pro Anfrage darf nur ein Eingabepuffer gesendet werden. Ähnlich wie bei Ausgabepuffern muss die Reihenfolge der zurückgegebenen Eingabepuffer von der HAL beibehalten werden.

Überlegungen zur Leistung:

Der Eingabepuffer sollte so früh wie möglich zurückgegeben werden. Wenn die HAL Sync-Fences unterstützt, kann sie „process_capture_result“ aufrufen, um sie mit entsprechend eingestellten Sync-Fences zurückzugeben. Wenn die Synchronisierungsgrenzen nicht unterstützt werden, kann der Puffer nur zurückgegeben werden, wenn er verbraucht ist, was lange dauern kann; Die HAL kann sich dafür entscheiden, diesen Eingabepuffer zu kopieren, damit der Puffer früher zurückkehrt.

Definition in Zeile 2361 der Datei camera3.h .

uint32_t num_output_buffers

Die Anzahl der in dieser Ergebnisstruktur zurückgegebenen Ausgabepuffer. Muss kleiner oder gleich der Anzahl der übereinstimmenden Erfassungsanforderung sein. Wenn dieser Wert geringer ist als die Pufferanzahl in der Erfassungsanforderung, muss mindestens ein weiterer Aufruf von „process_capture_result“ mit derselben Frame_Nummer erfolgen, um die verbleibenden Ausgabepuffer an das Framework zurückzugeben. Dies darf nur Null sein, wenn die Struktur gültige Ergebnismetadaten enthält oder in diesem Ergebnis ein Eingabepuffer zurückgegeben wird.

Definition in Zeile 2296 der Datei camera3.h .

const camera3_stream_buffer_t * Output_buffers

Die Handles für die Ausgabestreampuffer für diese Erfassung. Sie sind möglicherweise noch nicht gefüllt, wenn die HAL „process_capture_result()“ aufruft; Das Framework wartet auf die von der HAL bereitgestellten Release-Synchronisierungsgrenzen, bevor es die Puffer liest.

Der HAL muss den Release-Sync-Fence des Stream-Puffers auf einen gültigen Sync-FD oder auf -1 setzen, wenn der Puffer bereits gefüllt ist.

Wenn die HAL beim Verarbeiten des Puffers auf einen Fehler stößt und der Puffer nicht gefüllt ist, muss das Statusfeld des Puffers auf CAMERA3_BUFFER_STATUS_ERROR gesetzt werden. Wenn die HAL nicht auf dem Erfassungszaun gewartet hat, bevor der Fehler aufgetreten ist, sollte der Erfassungszaun in den Freigabezaun kopiert werden, damit das Framework auf dem Zaun warten kann, bevor es den Puffer wiederverwendet.

Der Erfassungszaun muss für alle Ausgabepuffer auf -1 gesetzt werden. Wenn num_output_buffers Null ist, kann dies NULL sein. In diesem Fall muss die HAL mindestens einen weiteren Aufruf von „process_capture_result“ durchführen, um die Ausgabepuffer bereitzustellen.

Wenn „process_capture_result“ mit einem neuen Puffer für einen Frame aufgerufen wird, müssen die Puffer aller vorherigen Frames für den entsprechenden Stream bereits geliefert worden sein (die Fences müssen noch nicht signalisiert worden sein).

>= CAMERA_DEVICE_API_VERSION_3_2:

Gralloc-Puffer für einen Frame können vor der entsprechenden SHUTTER-Benachrichtigung an das Framework gesendet werden.

Überlegungen zur Leistung:

An das Framework gelieferte Puffer werden erst an die Anwendungsschicht gesendet, wenn über einen SHUTTER notify()-Aufruf ein Zeitstempel für den Beginn der Belichtung empfangen wurde. Es wird dringend empfohlen, diesen Anruf so früh wie möglich abzusenden.

Definition in Zeile 2335 der Datei camera3.h .

uint32_t partielles_Ergebnis

>= CAMERA_DEVICE_API_VERSION_3_2:

Um Teilergebnisse nutzen zu können, muss die HAL die statischen Metadaten android.request.partialResultCount auf die Anzahl der Teilergebnisse setzen, die sie für jeden Frame sendet.

Jedes neue Erfassungsergebnis mit einem Teilergebnis muss dieses Feld (partial_result) auf einen eindeutigen inklusiven Wert zwischen 1 und android.request.partialResultCount setzen.

HALs, die diese Funktion nicht nutzen möchten, dürfen „android.request.partialResultCount“ oder „partial_result“ nicht auf einen anderen Wert als 1 setzen.

Dieser Wert muss auf 0 gesetzt werden, wenn ein Erfassungsergebnis nur Puffer und keine Metadaten enthält.

Definition in Zeile 2381 der Datei camera3.h .

const camera_metadata_t * Ergebnis

Die Ergebnismetadaten für diese Erfassung. Diese enthält Informationen über die endgültigen Erfassungsparameter, den Zustand der Erfassungs- und Nachbearbeitungshardware, den Zustand der 3A-Algorithmen, sofern aktiviert, und die Ausgabe aller aktivierten Statistikeinheiten.

Nur ein Aufruf von „process_capture_result()“ mit einer bestimmten Framenummer darf die Ergebnismetadaten enthalten. Alle anderen Aufrufe für dieselbe Frame_Nummer müssen diese auf NULL setzen.

Wenn bei der Erzeugung der Ergebnismetadaten ein Fehler aufgetreten ist, muss result ein leerer Metadatenpuffer sein und notify() muss mit ERROR_RESULT aufgerufen werden.

>= CAMERA_DEVICE_API_VERSION_3_2:

Mehrere Aufrufe von „process_capture_result()“ mit einer bestimmten Frame_Nummer können die Ergebnismetadaten enthalten.

Teilweise übermittelte Metadaten sollten keinen Metadatenschlüssel enthalten, der in einem vorherigen Teilergebnis für einen bestimmten Frame zurückgegeben wurde. Jedes neue Teilergebnis für diesen Frame muss außerdem einen eindeutigen Wert für „partial_result“ festlegen.

Wenn notify mit ERROR_RESULT aufgerufen wurde, werden alle weiteren Teilergebnisse für diesen Frame vom Framework ignoriert.

Definition in Zeile 2285 der Datei camera3.h .


Die Dokumentation für diese Struktur wurde aus der folgenden Datei generiert:
  • hardware/libhardware/include/hardware/ camera3.h