Informacje o strukturze camera2_request_queue_src_ops
#include <
camera2.h
>
Pola danych |
|
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) |
Szczegółowy opis
Protokół kolejki żądań wejściowych:
Platforma zawiera kolejkę i jej zawartość. Na początku kolejka jest pusta.
- Gdy pierwszy bufor metadanych zostanie umieszczony w kole, framework sygnalizuje urządzeniu, że tak się stało, wywołując notify_request_queue_not_empty().
- Po otrzymaniu komunikatu notify_request_queue_not_empty urządzenie musi wywołać dequeue() po tym, jak będzie gotowe do obsługi następnego bufora.
- Gdy urządzenie przetworzy bufor i będzie gotowe do przetworzenia kolejnego, musi ponownie wywołać dequeue(), zamiast czekać na powiadomienie. Jeśli nie ma już dostępnych buforów, dequeue() zwróci NULL. Gdy bufor stanie się dostępny, framework musi ponownie wywołać funkcję notify_request_queue_not_empty(). Jeśli urządzenie otrzyma wartość NULL z dequeue, nie musi ponownie wysyłać zapytania do kolejki, dopóki nie otrzyma wywołania notify_request_queue_not_empty() od źródła.
- Jeśli urządzenie wywoła funkcję buffer_count() i otrzyma wartość 0, nie oznacza to, że framework wywoła funkcję notify_request_queue_not_empty(). Takie powiadomienie zostanie wysłane tylko wtedy, gdy urządzenie otrzyma NULL z kolejki lub podczas uruchamiania.
- Wywołanie dequeue() w odpowiedzi na notify_request_queue_not_empty() może znajdować się w tym samym wątku co wywołanie notify_request_queue_not_empty() i może być wykonywane z poziomu wywołania notify.
- Wszystkie bufory żądań usunięte z kolejki muszą zostać zwrócone do frameworku przez wywołanie funkcji free_request, w tym w przypadku wystąpienia błędów, żądania wyczyszczenia urządzenia lub gdy urządzenie jest wyłączane.
Dokumentacja pola
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
Pobierz bufor metadanych z ramy. Zwraca wartość OK, jeśli nie ma błędów. Jeśli kolejka jest pusta, zwraca NULL w buforze. W takim przypadku urządzenie musi poczekać na wiadomość notify_request_queue_not_empty(), zanim spróbuje ponownie usunąć element z kolejki. Zdobyte w ten sposób bufory muszą zostać zwrócone do frameworku za pomocą funkcji 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) |
Pobierz liczbę oczekujących buforów żądań w kolejce. Jeśli jest skonfigurowane powtarzające się żądanie (żądanie strumienia), może zwrócić CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS. Wywołanie tej metody nie ma wpływu na to, czy framework wywoła metodę notify_request_queue_not_empty().
Dokumentacja tego typu danych została wygenerowana z tego pliku:
- hardware/libhardware/include/hardware/ camera2.h