Référence de la struct camera3_capture_result
#include <
camera3.h
>
Champs de données |
|
uint32_t | frame_number |
const Camera_metadata_t * | résultat |
uint32_t | num_output_buffers |
const Camera3_stream_buffer_t * | output_buffers |
const Camera3_stream_buffer_t * | input_buffer |
uint32_t | partial_result |
Description détaillée
camera3_capture_result_t:
Résultat d'une seule capture/ré-exploitation par l'appareil HAL de la caméra. Il est envoyé au framework de manière asynchrone avec process_capture_result(), en réponse à une seule requête de capture envoyée au HAL avec process_capture_request(). Le HAL peut effectuer plusieurs appels process_capture_result() pour chaque requête.
Chaque appel, qui porte le même numéro de frame, peut contenir un sous-ensemble des tampons de sortie et/ou les métadonnées de résultat. Les métadonnées ne peuvent être fournies qu'une seule fois pour un numéro de frame donné. Tous les autres appels doivent définir les métadonnées de résultat sur NULL.
La structure de résultat contient les métadonnées de sortie de cette capture et l'ensemble des tampons de sortie qui ont été/seront remplis pour cette capture. Chaque tampon de sortie peut être associé à une barrière de synchronisation de libération que le framework attendra avant de lire, au cas où le tampon n'aurait pas encore été rempli par le HAL.
>= CAMERA_DEVICE_API_VERSION_3_2:
Les métadonnées peuvent être fournies plusieurs fois pour un même numéro de frame. Le framework accumule l'ensemble de résultats final en combinant chaque résultat partiel dans l'ensemble de résultats total.
Si un tampon d'entrée est fourni dans une requête, le HAL doit le renvoyer dans l'un des appels process_capture_result. L'appel peut consister simplement à renvoyer le tampon d'entrée, sans métadonnées ni tampons de sortie. Les barrières de synchronisation doivent être gérées de la même manière que pour les tampons de sortie.
Considérations sur les performances:
Les applications recevront également ces résultats partiels immédiatement. L'envoi de résultats partiels est donc une optimisation des performances fortement recommandée pour éviter la latence totale du pipeline avant d'envoyer les résultats de ce qui est connu très tôt dans le pipeline.
Un cas d'utilisation typique peut être le calcul de l'état du mode AF à mi-parcours du pipeline. En renvoyant immédiatement l'état au framework, nous obtenons une augmentation de 50% des performances et de la réactivité perçue du mode autofocus.
Documentation des champs
uint32_t frame_number |
Le numéro de frame est un entier incrémentiel défini par le framework dans la requête envoyée pour identifier de manière unique cette capture. Il permet également d'identifier la requête dans les notifications asynchrones envoyées à camera3_callback_ops_t.notify() .
const Camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
Poignée du tampon du flux d'entrée pour cette capture. Il n'est peut-être pas encore utilisé au moment où le HAL appelle process_capture_result(); le framework attend les barrières de synchronisation de libération fournies par le HAL avant de réutiliser le tampon.
Le HAL doit gérer les barrières de synchronisation de la même manière que pour les buffers de sortie.
Une seule mémoire tampon d'entrée est autorisée par requête. Comme pour les tampons de sortie, l'ordre des tampons d'entrée renvoyés doit être maintenu par le HAL.
Considérations sur les performances:
Le tampon d'entrée doit être renvoyé dès que possible. Si le HAL prend en charge les barrières de synchronisation, il peut appeler process_capture_result pour le renvoyer avec les barrières de synchronisation définies de manière appropriée. Si les barrières de synchronisation ne sont pas prises en charge, le tampon ne peut être renvoyé que lorsqu'il est consommé, ce qui peut prendre beaucoup de temps. Le HAL peut choisir de copier ce tampon d'entrée pour le renvoyer plus tôt.
uint32_t num_output_buffers |
Nombre de tampons de sortie renvoyés dans cette structure de résultats. Doit être inférieur ou égal au nombre de la requête de capture correspondante. Si ce nombre est inférieur au nombre de tampons dans la requête de capture, au moins un autre appel à process_capture_result avec le même frame_number doit être effectué pour renvoyer les tampons de sortie restants au framework. Cette valeur ne peut être nulle que si la structure inclut des métadonnées de résultats valides ou si un tampon d'entrée est renvoyé dans ce résultat.
const Camera3_stream_buffer_t * output_buffers |
Les poignées des tampons de flux de sortie pour cette capture. Ils ne sont peut-être pas encore remplis au moment où le HAL appelle process_capture_result(); le framework attend les barrières de synchronisation de libération fournies par le HAL avant de lire les tampons.
Le HAL doit définir la barrière de synchronisation de libération du tampon de flux sur un fd de synchronisation valide ou sur -1 si le tampon a déjà été rempli.
Si le HAL rencontre une erreur lors du traitement du tampon et que le tampon n'est pas rempli, le champ d'état du tampon doit être défini sur CAMERA3_BUFFER_STATUS_ERROR. Si le HAL n'a pas attendu la barrière d'acquisition avant de rencontrer l'erreur, la barrière d'acquisition doit être copiée dans la barrière de libération pour permettre au framework d'attendre la barrière avant de réutiliser le tampon.
La clôture d'acquisition doit être définie sur -1 pour tous les tampons de sortie. Si num_output_buffers est nul, cette valeur peut être NULL. Dans ce cas, le HAL doit effectuer au moins un autre appel process_capture_result pour fournir les tampons de sortie.
Lorsque process_capture_result est appelé avec un nouveau tampon pour un frame, tous les tampons des frames précédents pour le flux correspondant doivent déjà avoir été transmis (les barrières ne doivent pas encore avoir été signalées).
>= CAMERA_DEVICE_API_VERSION_3_2:
Les tampons Gralloc d'un frame peuvent être envoyés au framework avant la notification SHUTTER correspondante.
Considérations sur les performances:
Les tampons envoyés au framework ne seront pas distribués à la couche application tant qu'un code temporel de début d'exposition n'a pas été reçu via un appel notify() de SHUTTER. Nous vous recommandons vivement d'envoyer cet appel le plus tôt possible.
uint32_t partial_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
Pour profiter des résultats partiels, le HAL doit définir les métadonnées statiques android.request.partialResultCount sur le nombre de résultats partiels qu'il enverra pour chaque frame.
Chaque nouveau résultat de capture avec un résultat partiel doit définir ce champ (partial_result) sur une valeur distincte comprise entre 1 et android.request.partialResultCount.
Les HAL qui ne souhaitent pas profiter de cette fonctionnalité ne doivent pas définir android.request.partialResultCount ou partial_result sur une valeur autre que 1.
Cette valeur doit être définie sur 0 lorsqu'un résultat de capture ne contient que des tampons et aucune métadonnée.
const camera_metadata_t * result |
Métadonnées de résultat de cette capture. Il contient des informations sur les paramètres de capture finaux, l'état du matériel de capture et de post-traitement, l'état des algorithmes 3A, le cas échéant, et la sortie de toutes les unités de statistiques activées.
Un seul appel à process_capture_result() avec un frame_number donné peut inclure les métadonnées de résultat. Tous les autres appels pour le même frame_number doivent définir cette valeur sur NULL.
Si une erreur s'est produite lors de la génération des métadonnées de résultat, le résultat doit être une mémoire tampon de métadonnées vide, et notify() doit être appelé avec ERROR_RESULT.
>= CAMERA_DEVICE_API_VERSION_3_2:
Plusieurs appels à process_capture_result() avec un frame_number donné peuvent inclure les métadonnées de résultat.
Les métadonnées partielles envoyées ne doivent pas inclure de clé de métadonnées renvoyée dans un résultat partiel précédent pour un frame donné. Chaque nouveau résultat partiel pour ce frame doit également définir une valeur partial_result distincte.
Si notify a été appelé avec ERROR_RESULT, tous les autres résultats partiels de ce frame sont ignorés par le framework.
La documentation de ce struct a été générée à partir du fichier suivant :
- hardware/libhardware/include/hardware/ camera3.h