Strukturreferenz für camera3_capture_result

Strukturreferenz für „camera3_capture_result“

#include < camera3.h >

Datenfelder

uint32_t  frame_number
 
const camera_metadata_t result
 
uint32_t  num_output_buffers
 
const camera3_stream_buffer_t output_buffers
 
const camera3_stream_buffer_t input_buffer
 
uint32_t  partial_result
 

Detaillierte Beschreibung

camera3_capture_result_t:

Das Ergebnis einer einzelnen Aufnahme/Neuverarbeitung durch das HAL-Gerät der Kamera. Dieser wird asynchron mit „process_capture_result()“ an das Framework gesendet, als Antwort auf eine einzelne Aufnahmeanfrage, die mit „process_capture_request()“ an die HAL gesendet wurde. Für jede Anfrage kann die HAL mehrere „process_capture_result()“-Aufrufe ausführen.

Jeder Aufruf mit derselben Frame-Nummer kann einen Teil der Ausgabebuffer und/oder die Ergebnismetadaten enthalten. Die Metadaten dürfen für eine bestimmte Frame-Nummer nur einmal angegeben werden. Bei allen anderen Aufrufen müssen die Ergebnismetadaten auf NULL gesetzt werden.

Die Ergebnisstruktur enthält die Ausgabemetadaten aus dieser Aufnahme und die Ausgabebuffer, die für diese Aufnahme gefüllt wurden bzw. werden. Jeder Ausgabebuffer kann mit einem Release-Synchronisations-Fence versehen sein, auf das das Framework wartet, bevor es liest, falls der Buffer noch nicht von der HAL gefüllt wurde.

>= CAMERA_DEVICE_API_VERSION_3_2:

Die Metadaten können für eine einzelne Frame-Nummer mehrmals angegeben werden. Das Framework fasst die endgültige Ergebnismenge zusammen, indem jedes Teilergebnis in die Gesamtergebnismenge eingefügt wird.

Wenn in einer Anfrage ein Eingabebuffer angegeben ist, muss die HAL ihn in einem der Aufrufe von „process_capture_result“ zurückgeben. Der Aufruf kann auch nur den Eingabebuffer ohne Metadaten und Ausgabebuffer zurückgeben. Die Synchronisationssperren müssen genauso wie bei Ausgabebuffern behandelt werden.

Hinweise zur Leistung:

Anwendungen erhalten diese Teilergebnisse ebenfalls sofort. Das Senden von Teilergebnissen ist daher eine sehr empfehlenswerte Leistungsoptimierung, um die Gesamtlatenz der Pipeline zu vermeiden, bevor die Ergebnisse für das, was bereits sehr früh in der Pipeline bekannt ist, gesendet werden.

Ein typischer Anwendungsfall ist die Berechnung des AF-Status in der Mitte der Pipeline. Wenn der Status sofort an das Framework zurückgesendet wird, lässt sich die Leistung um 50% steigern und die Reaktionsfähigkeit des Autofokus verbessern.

Definition in Zeile 2251 der Datei camera3.h .

Felddokumentation

uint32_t frame_number

Die Frame-Nummer ist eine inkrementelle Ganzzahl, die vom Framework in der gesendeten Anfrage festgelegt wird, um diese Aufnahme eindeutig zu identifizieren. Außerdem wird sie 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:

Der Handle für den Eingabestream-Puffer für diese Aufnahme. Er ist möglicherweise noch nicht aufgebraucht, wenn die HAL process_capture_result() aufruft. Das Framework wartet auf die von der HAL bereitgestellten Release-Synchronisationsschranken, bevor der Puffer wiederverwendet wird.

Die HAL sollte die Synchronisationsschranken genauso behandeln wie die Ausgabe-Buffer.

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

Hinweise zur Leistung:

Der Eingabepuffer sollte so früh wie möglich zurückgegeben werden. Wenn die HAL Synchronisationsschranken unterstützt, kann sie „process_capture_result“ aufrufen, um sie zurückzugeben, wobei die Synchronisationsschranken entsprechend festgelegt werden. Wenn die Synchronisationssperren nicht unterstützt werden, kann der Puffer nur zurückgegeben werden, wenn er verbraucht wurde. Das kann lange dauern. Die HAL kann diesen Eingabepuffer kopieren, um die Rückgabe des Puffers zu beschleunigen.

Definition in Zeile 2361 der Datei camera3.h .

uint32_t num_output_buffers

Die Anzahl der Ausgabebuffer, die in dieser Ergebnisstruktur zurückgegeben werden. Muss kleiner oder gleich der Anzahl der übereinstimmenden Erfassungsanfragen sein. Wenn dies kleiner als die Anzahl der Puffer in der Aufnahmeanfrage ist, muss mindestens noch einmal „process_capture_result“ mit derselben „frame_number“ aufgerufen werden, um die verbleibenden Ausgabepuffer an das Framework zurückzugeben. Dieser Wert kann nur dann 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 Ausgabestream-Buffer für diese Erfassung. Sie sind möglicherweise noch nicht gefüllt, wenn die HAL process_capture_result() aufruft. Das Framework wartet auf die vom HAL bereitgestellten Release-Synchronisationsschranken, bevor es die Puffer liest.

Die HAL muss die Release-Synchronisationssperre des Stream-Buffers auf eine gültige Synchronisierungs-FD oder auf -1 setzen, wenn der Puffer bereits gefüllt ist.

Wenn bei der Verarbeitung des Buffers durch die HAL ein Fehler auftritt und der Buffer nicht gefüllt ist, muss das Statusfeld des Buffers auf CAMERA3_BUFFER_STATUS_ERROR gesetzt werden. Wenn der HAL nicht auf die Acquire-Sperre gewartet hat, bevor der Fehler aufgetreten ist, sollte die Acquire-Sperre in die Release-Sperre kopiert werden, damit das Framework auf die Sperre warten kann, bevor der Puffer wiederverwendet wird.

Der Acquire-Zaun muss für alle Ausgabebuffer auf -1 gesetzt sein. Wenn „num_output_buffers“ null ist, kann dieser Wert NULL sein. In diesem Fall muss die HAL mindestens einen weiteren Aufruf von „process_capture_result“ ausführen, um die Ausgabebuffer bereitzustellen.

Wenn „process_capture_result“ mit einem neuen Puffer für einen Frame aufgerufen wird, müssen alle Puffer der vorherigen Frames für den entsprechenden Stream bereits gesendet worden sein. Die Grenzwerte 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.

Hinweise zur Leistung:

An das Framework gesendete Puffer werden erst dann an die Anwendungsebene weitergeleitet, wenn über einen SHUTTER notify()-Aufruf ein Zeitstempel für den Beginn der Belichtung empfangen wurde. Wir empfehlen, diesen Anruf so früh wie möglich zu senden.

Definition in Zeile 2335 der Datei camera3.h .

uint32_t partial_result

>= CAMERA_DEVICE_API_VERSION_3_2:

Damit Sie anteilige Ergebnisse nutzen können, muss die HAL die statischen Metadaten „android.request.partialResultCount“ auf die Anzahl der anteiligen Ergebnisse festlegen, die für jeden Frame gesendet werden.

Für jedes neue Erfassungsergebnis mit einem Teilergebnis muss dieses Feld (partial_result) auf einen eindeutigen Wert zwischen 1 und android.request.partialResultCount festgelegt werden.

HALs, die diese Funktion nicht nutzen möchten, dürfen für android.request.partialResultCount oder partial_result keinen anderen Wert als „1“ festlegen.

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 * result

Die Ergebnismetadaten für diese Aufnahme. Dieser enthält Informationen zu den endgültigen Aufnahmeparametern, zum Status der Aufnahme- und Nachbearbeitungshardware, zum Status der 3A-Algorithmen (falls aktiviert) und zur Ausgabe aller aktivierten Statistikeinheiten.

Die Ergebnismetadaten dürfen nur in einem Aufruf von „process_capture_result()“ mit einer bestimmten Frame-Nummer enthalten sein. Bei allen anderen Aufrufen mit derselben frame_number muss dies auf NULL gesetzt werden.

Wenn bei der Erstellung der Ergebnismetadaten ein Fehler aufgetreten ist, muss „result“ ein leerer Metadaten-Puffer 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.

Eingereichte Teilmetadaten dürfen keinen Metadatenschlüssel enthalten, der in einem vorherigen Teilergebnis für einen bestimmten Frame zurückgegeben wurde. Für jedes neue Teilergebnis für diesen Frame muss auch ein eindeutiger Wert für „partial_result“ festgelegt werden.

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: