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
Richiedi il protocollo della coda di input:
Il framework contiene la coda e il suo contenuto. All'inizio la coda è vuota.
- Quando il primo buffer di metadati viene inserito nella coda, il framework segnala al dispositivo chiamando notify_request_queue_not_empty().
- Dopo aver ricevuto notify_request_queue_not_empty, il dispositivo deve chiamare dequeue() una volta pronto a gestire il buffer successivo.
- Una volta che il dispositivo ha elaborato un buffer ed è pronto per il buffer successivo, deve chiamare nuovamente dequeue() invece di attendere una notifica. Se non ci sono più buffer disponibili, dequeue() restituirà NULL. Dopo questo punto, quando un buffer diventa disponibile, il framework deve chiamare nuovamente notify_request_queue_not_empty(). Se il dispositivo riceve un ritorno NULL dalla rimozione della coda, non è necessario interrogare nuovamente la coda finché non viene ricevuta una chiamata notify_request_queue_not_empty() dall'origine.
- Se il dispositivo chiama buffer_count() e riceve 0, ciò non significa che il framework fornirà una chiamata notify_request_queue_not_empty(). Il framework fornirà tale notifica solo dopo che il dispositivo ha ricevuto un NULL dalla rimozione dalla coda o all'avvio iniziale.
- La chiamata dequeue() in risposta a notify_request_queue_not_empty() può trovarsi sullo stesso thread della chiamata notify_request_queue_not_empty() e può essere eseguita dall'interno della chiamata di notifica.
- Tutti i buffer delle richieste deaccodate devono essere restituiti al framework chiamando free_request, anche quando si verificano errori, viene richiesto uno svuotamento del dispositivo o quando il dispositivo si sta spegnendo.
Documentazione sul campo
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
Ottieni un buffer di metadati dal framework. Restituisce OK se non sono presenti errori. Se la coda è vuota, restituisce NULL nel buffer. In tal caso, il dispositivo deve attendere un messaggio notify_request_queue_not_empty() prima di tentare nuovamente di rimuovere la 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) |
Ottieni il conteggio dei buffer di richiesta in sospeso nella coda. Può restituire CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS se è attualmente configurata una richiesta ripetuta (richiesta di streaming). La chiamata a questo metodo non ha alcun effetto sul fatto che il metodo notify_request_queue_not_empty() verrà chiamato dal framework.
La documentazione per questa struttura è stata generata dal seguente file:
- hardware/libhardware/include/hardware/ camera2.h