À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Documentation de référence sur la struct camera3_callback_ops
#include <
camera3.h
>
Définition à la ligne
2397
du fichier
camera3.h
.
notify :
Rappel de notification asynchrone du HAL, déclenché pour diverses raisons. Uniquement pour les informations indépendantes de la capture de frame ou qui nécessitent un timing spécifique. La propriété de la structure du message reste avec le HAL, et le message n'a besoin d'être valide que pour la durée de cet appel.
Plusieurs threads peuvent appeler
notify()
simultanément.
<= CAMERA_DEVICE_API_VERSION_3_1:
La notification du début de l'exposition pour une requête donnée doit être envoyée par le HAL avant le premier appel de
process_capture_result()
pour cette requête.
>= CAMERA_DEVICE_API_VERSION_3_2 :
Les tampons fournis au framework ne seront pas distribués à la couche application tant qu'un code temporel de début d'exposition (ou le code temporel de début d'exposition de l'image d'entrée pour une demande de retraitement) n'aura pas été reçu via un appel SHUTTER
notify()
. Nous vous recommandons vivement d'envoyer cet appel dès que possible.
Exigences de performances :
Il s'agit d'un appel non bloquant. Le framework renverra cet appel dans 5 ms.
Définition à la ligne
2499
du fichier
camera3.h
.
process_capture_result:
Envoyez les résultats d'une capture terminée au framework.
process_capture_result()
peut être appelé plusieurs fois par la HAL en réponse à une seule demande de capture. Cela permet, par exemple, de renvoyer les métadonnées et les tampons basse résolution en un seul appel, et les tampons JPEG post-traités dans un appel ultérieur, une fois qu'ils sont disponibles. Chaque appel doit inclure le numéro de frame de la requête pour laquelle il renvoie des métadonnées ou des tampons.
Un composant (tampon ou métadonnées) du résultat complet ne peut être inclus que dans un seul appel process_capture_result. Un tampon pour chaque flux et les métadonnées de résultat doivent être renvoyés par le HAL pour chaque requête dans l'un des appels process_capture_result, même en cas d'erreurs lors de la production de certains résultats. Un appel à
process_capture_result()
sans tampons de sortie ni métadonnées de résultat n'est pas autorisé.
L'ordre de renvoi des métadonnées et des tampons pour un résultat unique n'a pas d'importance, mais les tampons d'un flux donné doivent être renvoyés dans l'ordre FIFO. Ainsi, le tampon de la requête 5 pour le flux A doit toujours être renvoyé avant le tampon de la requête 6 pour le flux A. Cela s'applique également aux métadonnées des résultats : les métadonnées de la requête 5 doivent être renvoyées avant celles de la requête 6.
Toutefois, les différents flux sont indépendants les uns des autres. Il est donc acceptable et attendu que le tampon de la requête 5 du flux A soit renvoyé après le tampon de la requête 6 du flux B. Il est également acceptable que les métadonnées de résultat de la requête 6 du flux B soient renvoyées avant le tampon de la requête 5 du flux A.
La HAL conserve la propriété de la structure des résultats, qui n'a besoin d'être valide que pour l'accès pendant cet appel. Le framework copie tout ce dont il a besoin avant le retour de cet appel.
Il n'est pas encore nécessaire de remplir les tampons de sortie. Le framework attendra la barrière de synchronisation de la libération du tampon de flux avant de lire les données du tampon. Par conséquent, cette méthode doit être appelée par la HAL dès que possible, même si certains ou tous les tampons de sortie sont encore en cours de remplissage. Le HAL doit inclure des barrières de synchronisation de version valides dans chaque entrée de tampon de flux output_buffers, ou -1 si ce tampon de flux est déjà rempli.
Si le tampon de résultat ne peut pas être construit pour une requête, le HAL doit renvoyer un tampon de métadonnées vide, mais fournir quand même les tampons de sortie et leurs barrières de synchronisation. De plus,
notify()
doit être appelé avec un message ERROR_RESULT.
Si un tampon de sortie ne peut pas être rempli, son champ d'état doit être défini sur STATUS_ERROR. De plus,
notify()
doit être appelé avec un message ERROR_BUFFER.
Si la capture entière a échoué, cette méthode doit quand même être appelée pour renvoyer les tampons de sortie au framework. Tous les états de mémoire tampon doivent être STATUS_ERROR, et les métadonnées de résultat doivent être une mémoire tampon vide. De plus,
notify()
doit être appelé avec un message ERROR_REQUEST. Dans ce cas, aucun message ERROR_RESULT/ERROR_BUFFER individuel ne doit être envoyé.
Exigences de performances :
Il s'agit d'un appel non bloquant. Le framework renverra cet appel dans 5 ms.
La latence du pipeline (voir S7 pour la définition) doit être inférieure ou égale à quatre intervalles de trame, et doit être inférieure ou égale à huit intervalles de trame.
Définition à la ligne
2466
du fichier
camera3.h
.
La documentation de cette structure a été générée à partir du fichier suivant :
-
hardware/libhardware/include/hardware/
camera3.h
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Android Hardware Abstraction Layer: camera3_callback_ops Struct Reference\n\ncamera3_callback_ops Struct Reference\n=====================================\n\n[Data Fields](#pub-attribs) \ncamera3_callback_ops Struct Reference \n\n`\n#include \u003c\n`[camera3.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)`\n\u003e\n`\n\n|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Data Fields ----------- ||\n| void(\\* | [process_capture_result](/reference/hal/structcamera3__callback__ops#a2f7cf688a195532999b8498d6ef15e45) )(const struct [camera3_callback_ops](/reference/hal/structcamera3__callback__ops) \\*, const [camera3_capture_result_t](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h) \\*result) |\n| ||\n| void(\\* | [notify](/reference/hal/structcamera3__callback__ops#a6d702d6e962f95105b984b17462619b3) )(const struct [camera3_callback_ops](/reference/hal/structcamera3__callback__ops) \\*, const [camera3_notify_msg_t](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h) \\*msg) |\n| ||\n\n\nDetailed Description\n--------------------\n\n\nDefinition at line\n[2397](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)\nof file\n[camera3.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)\n.\n\nField Documentation\n-------------------\n\n\n|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| void(\\* notify)(const struct [camera3_callback_ops](/reference/hal/structcamera3__callback__ops) \\*, const [camera3_notify_msg_t](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h) \\*msg) |\n\n\nnotify:\n\n\nAsynchronous notification callback from the HAL, fired for various reasons. Only for information independent of frame capture, or that require specific timing. The ownership of the message structure remains with the HAL, and the msg only needs to be valid for the duration of this call.\n\n\nMultiple threads may call\n[notify()](/reference/hal/structcamera3__callback__ops#a6d702d6e962f95105b984b17462619b3)\nsimultaneously.\n\n\n\\\u003c= CAMERA_DEVICE_API_VERSION_3_1:\n\n\nThe notification for the start of exposure for a given request must be sent by the HAL before the first call to\n[process_capture_result()](/reference/hal/structcamera3__callback__ops#a2f7cf688a195532999b8498d6ef15e45)\nfor that request is made.\n\n\n\\\u003e= CAMERA_DEVICE_API_VERSION_3_2:\n\n\nBuffers delivered to the framework will not be dispatched to the application layer until a start of exposure timestamp (or input image's start of exposure timestamp for a reprocess request) has been received via a SHUTTER\n[notify()](/reference/hal/structcamera3__callback__ops#a6d702d6e962f95105b984b17462619b3)\ncall. It is highly recommended to dispatch this call as early as possible.\n\n*** ** * ** ***\n\n\nPerformance requirements:\n\n\nThis is a non-blocking call. The framework will return this call in 5ms.\n\n\nDefinition at line\n[2499](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)\nof file\n[camera3.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)\n.\n\n|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| void(\\* process_capture_result)(const struct [camera3_callback_ops](/reference/hal/structcamera3__callback__ops) \\*, const [camera3_capture_result_t](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h) \\*result) |\n\n\nprocess_capture_result:\n\n\nSend results from a completed capture to the framework.\n[process_capture_result()](/reference/hal/structcamera3__callback__ops#a2f7cf688a195532999b8498d6ef15e45)\nmay be invoked multiple times by the HAL in response to a single capture request. This allows, for example, the metadata and low-resolution buffers to be returned in one call, and post-processed JPEG buffers in a later call, once it is available. Each call must include the frame number of the request it is returning metadata or buffers for.\n\n\nA component (buffer or metadata) of the complete result may only be included in one process_capture_result call. A buffer for each stream, and the result metadata, must be returned by the HAL for each request in one of the process_capture_result calls, even in case of errors producing some of the output. A call to\n[process_capture_result()](/reference/hal/structcamera3__callback__ops#a2f7cf688a195532999b8498d6ef15e45)\nwith neither output buffers or result metadata is not allowed.\n\n\nThe order of returning metadata and buffers for a single result does not matter, but buffers for a given stream must be returned in FIFO order. So the buffer for request 5 for stream A must always be returned before the buffer for request 6 for stream A. This also applies to the result metadata; the metadata for request 5 must be returned before the metadata for request 6.\n\n\nHowever, different streams are independent of each other, so it is acceptable and expected that the buffer for request 5 for stream A may be returned after the buffer for request 6 for stream B is. And it is acceptable that the result metadata for request 6 for stream B is returned before the buffer for request 5 for stream A is.\n\n\nThe HAL retains ownership of result structure, which only needs to be valid to access during this call. The framework will copy whatever it needs before this call returns.\n\n\nThe output buffers do not need to be filled yet; the framework will wait on the stream buffer release sync fence before reading the buffer data. Therefore, this method should be called by the HAL as soon as possible, even if some or all of the output buffers are still in being filled. The HAL must include valid release sync fences into each output_buffers stream buffer entry, or -1 if that stream buffer is already filled.\n\n\nIf the result buffer cannot be constructed for a request, the HAL should return an empty metadata buffer, but still provide the output buffers and their sync fences. In addition,\n[notify()](/reference/hal/structcamera3__callback__ops#a6d702d6e962f95105b984b17462619b3)\nmust be called with an ERROR_RESULT message.\n\n\nIf an output buffer cannot be filled, its status field must be set to STATUS_ERROR. In addition,\n[notify()](/reference/hal/structcamera3__callback__ops#a6d702d6e962f95105b984b17462619b3)\nmust be called with a ERROR_BUFFER message.\n\n\nIf the entire capture has failed, then this method still needs to be called to return the output buffers to the framework. All the buffer statuses should be STATUS_ERROR, and the result metadata should be an empty buffer. In addition,\n[notify()](/reference/hal/structcamera3__callback__ops#a6d702d6e962f95105b984b17462619b3)\nmust be called with a ERROR_REQUEST message. In this case, individual ERROR_RESULT/ERROR_BUFFER messages should not be sent.\n\n\nPerformance requirements:\n\n\nThis is a non-blocking call. The framework will return this call in 5ms.\n\n\nThe pipeline latency (see S7 for definition) should be less than or equal to 4 frame intervals, and must be less than or equal to 8 frame intervals.\n\n\nDefinition at line\n[2466](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)\nof file\n[camera3.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)\n.\n\n*** ** * ** ***\n\nThe documentation for this struct was generated from the following file:\n\n- hardware/libhardware/include/hardware/ [camera3.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/camera3.h)"]]