Справочник по структуре camera2_device_ops
#include < camera2.h >
Поля данных | |
| интервал(* | set_request_queue_src_ops )(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
| интервал(* | notify_request_queue_not_empty )(const struct camera2_device *) |
| интервал(* | set_frame_queue_dst_ops )(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
| интервал(* | get_in_progress_count )(const struct camera2_device *) |
| интервал(* | flash_captures_in_progress )(const struct camera2_device *) |
| интервал(* | struct_default_request )(const struct camera2_device *, int request_template, camera_metadata_t **request) |
| интервал(* | allocate_stream )(const struct camera2_device *, uint32_t ширина, uint32_t высота, формат int, const camera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers) |
| интервал(* | Register_stream_buffers )(const struct camera2_device *, uint32_tstream_id, int num_buffers, buffer_handle_t *buffers) |
| интервал(* | Release_stream )(const struct camera2_device *, uint32_tstream_id) |
| интервал(* | allocate_reprocess_stream )(const struct camera2_device *, uint32_t ширина, uint32_t высота, формат uint32_t, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
| интервал(* | allocate_reprocess_stream_from_stream )(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id) |
| интервал(* | Release_reprocess_stream )(const struct camera2_device *, uint32_tstream_id) |
| интервал(* | триггер_действие )(const struct camera2_device *, uint32_t ignore_id, int32_t ext1, int32_t ext2) |
| интервал(* | set_notify_callback )(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
| интервал(* | get_metadata_vendor_tag_ops )(const struct camera2_device *,vendor_tag_query_ops_t **ops) |
| интервал(* | дамп )(const struct camera2_device *, int fd) |
| интервал(* | get_instance_metadata )(const struct camera2_device *, camera_metadata **instance_metadata) |
Подробное описание
Полевая документация
| int(* allocate_reprocess_stream)(const struct camera2_device *, uint32_t ширина, uint32_t высота, формат uint32_t, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
allocate_reprocess_stream:
Выделите для использования новый входной поток, определяемый шириной, высотой выходного буфера и форматом пикселей. В случае успеха возвращает идентификатор нового потока, флаги использования gralloc и необходимое количество одновременно доступных буферов. Условия ошибки:
- Запрос комбинации ширины/высоты/формата, которая не поддерживается статическими характеристиками датчика.
- Запрашивается одновременная настройка слишком большого количества потоков повторной обработки.
Входные параметры:
- ширина, высота, формат: спецификация буферов, которые будут отправлены через этот поток. Формат должен быть значением из списка HAL_PIXEL_FORMAT_*.
- reprocess_stream_ops: структура указателей функций для получения и освобождения буферов для этого потока. Базовый поток будет настроен на основе выходных данных использования и max_buffers.
Выходные параметры:
- stream_id: целое число без знака, идентифицирующее этот поток. Это значение используется во входящих запросах для идентификации потока и при освобождении потока. Эти идентификаторы нумеруются отдельно от идентификаторов входного потока.
- Consumer_usage: маска использования gralloc, необходимая устройству HAL для потребления запрошенного типа данных. Это используется при выделении новых буферов gralloc для очереди буферов потока.
- max_buffers: максимальное количество буферов, которые устройству HAL может потребоваться одновременно. Устройство не может иметь больше буферов, полученных одновременно, чем это значение.
| int(* allocate_reprocess_stream_from_stream)(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id) |
allocate_reprocess_stream_from_stream:
Выделите для использования новый входной поток, который будет использовать буферы, выделенные для существующего выходного потока. То есть после того, как HAL поместит буфер в выходной поток, он может увидеть тот же самый буфер, переданный ему из этого входного потока повторной обработки. После того как HAL высвободит буфер обратно в поток повторной обработки, он будет возвращен в очередь вывода для повторного использования.
Условия ошибки:
- Использование выходного потока неподходящего размера/формата в качестве основы потока повторной обработки.
- Попытка одновременно выделить слишком много потоков обработки.
Входные параметры:
- output_stream_id: идентификатор существующего выходного потока, размер и формат которого подходят для повторной обработки.
- reprocess_stream_ops: структура указателей функций для получения и освобождения буферов для этого потока. Базовый поток будет использовать те же дескрипторы графического буфера, что и выходной поток.
Выходные параметры:
- stream_id: целое число без знака, идентифицирующее этот поток. Это значение используется во входящих запросах для идентификации потока и при освобождении потока. Эти идентификаторы нумеруются отдельно от идентификаторов входного потока.
Клиент HAL всегда должен освобождать поток повторной обработки до того, как он выпустит выходной поток, на котором он основан.
| int(* allocate_stream)(const struct camera2_device *,uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *usage, uint32_t *max_buffers) |
выделить_поток:
Выделите для использования новый выходной поток, определяемый шириной выходного буфера, высотой, целью и, возможно, форматом пикселей. В случае успеха возвращает идентификатор нового потока, флаги использования gralloc, минимальное количество буферов очереди и, возможно, формат пикселей. Условия ошибки:
- Запрос комбинации ширины/высоты/формата, которая не поддерживается статическими характеристиками датчика.
- Запрос слишком большого количества потоков данного типа формата (например, 2 необработанных потока Bayer).
Входные параметры:
- ширина, высота, формат: спецификация буферов, которые будут отправлены через этот поток. Формат — это значение из списка HAL_PIXEL_FORMAT_*. Если используется HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, то модуль gralloc платформы выберет формат на основе флагов использования, предоставленных HAL камеры и потребителем потока. HAL камеры должен проверять буферы, переданные ему при вызове Register_stream_buffers, чтобы при необходимости получить формат, специфичный для реализации.
- stream_ops: структура указателей функций для получения и постановки в очередь буферов для этого потока. Базовый поток будет настроен на основе выходных данных использования и max_buffers. Методы в этой структуре не могут быть вызваны до тех пор, пока не вернется результат allocate_stream.
Выходные параметры:
- stream_id: целое число без знака, идентифицирующее этот поток. Это значение используется во входящих запросах для идентификации потока и при освобождении потока.
- использование: маска использования gralloc, необходимая устройству HAL для создания запрошенного типа данных. Это используется при выделении новых буферов gralloc для очереди буферов потока.
- max_buffers: максимальное количество буферов, которые устройству HAL может потребоваться вывести из очереди одновременно. Устройство не может одновременно извлечь из очереди больше буферов, чем это значение.
| int(*struct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request) |
Создайте заполненный запрос по умолчанию для стандартных случаев использования камеры.
Устройство должно вернуть полный запрос, настроенный для соответствия запрошенному варианту использования, который должен быть одним из перечислений CAMERA2_TEMPLATE_*. Все поля управления запросами должны быть включены, за исключением android.request.outputStreams.
Возвращаемый буфер метаданных должен быть выделен с помощью allocate_camera_metadata. Фреймворк берет на себя ответственность за буфер.
| int(* dump)(const struct camera2_device *, int fd) |
| int(*lush_captures_in_progress)(const struct camera2_device *) |
Очистите все выполняемые захваты. Сюда входят все запросы, выведенные из очереди (обычные или повторной обработки), которые еще не поместили выходные данные в поток или очередь кадров. Частично завершенные захваты должны быть завершены в обычном режиме. Никакие новые запросы не могут быть исключены из очереди запросов до завершения очистки.
| int(* get_in_progress_count)(const struct camera2_device *) |
Количество запросов камеры, обрабатываемых устройством в данный момент (захваты/повторные обработки, запросы которых были исключены из очереди, но еще не поставлены в очередь на выходной конвейер(ы)). Платформа не может выпускать потоки, пока счетчик выполнения не станет равным 0.
| int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata) |
Получите метаданные, относящиеся к экземпляру устройства. Эти метаданные должны быть постоянными для одного экземпляра устройства камеры, но могут различаться в зависимости от вызова open(). Возвращенный указатель camera_metadata должен быть действительным до тех пор, пока не будет вызван метод close() устройства.
Информация о версии:
CAMERA_DEVICE_API_VERSION_2_0:
Нет в наличии. Платформа может не получить доступ к этому указателю функции.
CAMERA_DEVICE_API_VERSION_2_1:
Действительный. Может быть вызван фреймворком.
| int(* get_metadata_vendor_tag_ops)(const struct camera2_device *,vendor_tag_query_ops_t **ops) |
| int(* notify_request_queue_not_empty)(const struct camera2_device *) |
| int(* Register_stream_buffers)(const struct camera2_device *, uint32_tstream_id, int num_buffers, buffer_handle_t *buffers) |
Зарегистрируйте буферы для данного потока. Он вызывается после успешного вызова allocate_stream и до того, как первый запрос, ссылающийся на поток, будет поставлен в очередь. Этот метод предназначен для того, чтобы позволить устройству HAL отображать или иным образом готовить буферы для последующего использования. num_buffers гарантированно будет не меньше max_buffers (из allocate_stream), но может быть и больше. Буферы уже будут заблокированы для использования. В конце вызова все буферы должны быть готовы к возврату в очередь. Если формат потока был установлен на HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, HAL камеры должен проверить переданные здесь буферы, чтобы определить любую информацию о формате пикселей, частную для платформы.
| int(* Release_reprocess_stream)(const struct camera2_device *, uint32_tstream_id) |
| int(* Release_stream)(const struct camera2_device *, uint32_tstream_id) |
| int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
| int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
| int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
| int(* триггер_действие)(const struct camera2_device *, uint32_t ignore_id, int32_t ext1, int32_t ext2) |
Документация для этой структуры была создана из следующего файла:
- Аппаратное обеспечение/libhardware/include/hardware/ camera2.h