Riferimento alla struttura camera2_request_queue_src_ops
#include <
camera2.h
>
Campi dati |
|
int(* | request_count )(const struct camera2_request_queue_src_ops *q) |
int(* | dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
int(* | free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
Descrizione dettagliata
Protocollo della coda di input delle richieste:
Il framework contiene la coda e i relativi contenuti. All'inizio la coda è vuota.
- Quando il primo buffer di metadati viene inserito nella coda, il framework segnala il dispositivo chiamando notify_request_queue_not_empty().
- Dopo aver ricevuto notify_request_queue_not_empty, il dispositivo deve chiamare dequeue() quando è pronto a gestire il buffer successivo.
- Una volta elaborato un buffer ed essere pronto per il successivo, il dispositivo deve chiamare di nuovo dequeue() anziché attendere una notifica. Se non sono disponibili altri buffer, dequeue() restituirà NULL. Dopo questo punto, quando un buffer diventa disponibile, il framework deve chiamare di nuovo notify_request_queue_not_empty(). Se il dispositivo riceve un valore restituito NULL da dequeue, non deve eseguire nuovamente una query sulla coda finché non riceve una chiamata notify_request_queue_not_empty() dall'origine.
- Se il dispositivo chiama buffer_count() e riceve 0, non significa che il framework fornirà una chiamata notify_request_queue_not_empty(). Il framework fornirà una notifica di questo tipo solo dopo che il dispositivo avrà ricevuto un valore NULL dal dequeue o all'avvio iniziale.
- La chiamata dequeue() in risposta a notify_request_queue_not_empty() può trovarsi nello stesso thread della chiamata notify_request_queue_not_empty() e può essere eseguita all'interno della chiamata notify.
- Tutti i buffer delle richieste rimossi dalla coda devono essere restituiti al framework chiamando free_request, ad esempio quando si verificano errori, viene richiesto lo svuotamento della cache del dispositivo o quando il dispositivo si arresta.
Documentazione dei campi
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
Recupera un buffer di metadati dal framework. Restituisce OK se non viene rilevato alcun errore. Se la coda è vuota, restituisce NULL nel buffer. In questo caso, il dispositivo deve attendere un messaggio notify_request_queue_not_empty() prima di tentare di eseguire di nuovo la rimozione dalla coda. I buffer ottenuti in questo modo devono essere restituiti al framework con free_request() .
int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
int(* request_count)(const struct camera2_request_queue_src_ops *q) |
Recupera il conteggio dei buffer delle richieste in attesa nella coda. Potrebbe restituire CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS se al momento è configurata una richiesta ripetuta (richiesta di stream). La chiamata a questo metodo non influisce sul fatto che il metodo notify_request_queue_not_empty() venga chiamato dal framework.
La documentazione di questa struttura è stata generata dal seguente file:
- hardware/libhardware/include/hardware/ camera2.h