Справочник по структуре camera2_request_queue_src_ops
#include < camera2.h >
Поля данных | |
интервал(* | request_count )(const struct camera2_request_queue_src_ops *q) |
интервал(* | dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
интервал(* | free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
Подробное описание
Протокол входной очереди запроса:
Фреймворк хранит очередь и ее содержимое. В начале очередь пуста.
- Когда первый буфер метаданных помещается в очередь, платформа сигнализирует устройству, вызывая notify_request_queue_not_empty().
- После получения notify_request_queue_not_empty устройство должно вызвать dequeue(), как только оно будет готово обработать следующий буфер.
- Как только устройство обработало буфер и готово к следующему буферу, оно должно снова вызвать dequeue() вместо ожидания уведомления. Если доступных буферов больше нет, dequeue() вернет NULL. После этого момента, когда буфер становится доступным, платформа должна снова вызвать notify_request_queue_not_empty(). Если устройство получает NULL-возврат из очереди, ему не нужно снова запрашивать очередь, пока из источника не будет получен вызов notify_request_queue_not_empty().
- Если устройство вызывает buffer_count() и получает 0, это не означает, что платформа предоставит вызов notify_request_queue_not_empty(). Платформа предоставит такое уведомление только после того, как устройство получит NULL из очереди или при первом запуске.
- Вызов dequeue() в ответ на notify_request_queue_not_empty() может находиться в том же потоке, что и вызов notify_request_queue_not_empty(), и может выполняться внутри вызова notify.
- Все буферы запросов, исключенные из очереди, должны быть возвращены в платформу путем вызова free_request, в том числе при возникновении ошибок, запросе очистки устройства или при выключении устройства.
Полевая документация
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
Получите буфер метаданных из платформы. Возвращает ОК, если нет ошибок. Если очередь пуста, в буфере возвращается NULL. В этом случае устройство должно дождаться сообщения notify_request_queue_not_empty(), прежде чем пытаться снова выйти из очереди. Буферы, полученные таким образом, необходимо вернуть в фреймворк с помощью 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) |
Получите количество буферов запросов, ожидающих в очереди. Может возвращать CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS, если в данный момент настроен повторяющийся запрос (запрос потока). Вызов этого метода не влияет на то, будет ли метод notify_request_queue_not_empty() вызываться платформой.
Документация для этой структуры была создана из следующего файла:
- Аппаратное обеспечение/libhardware/include/hardware/ camera2.h