Ссылка на структуру camera3_capture_result
#include < camera3.h >
Поля данных | |
uint32_t | номер_фрейма |
const camera_metadata_t * | результат |
uint32_t | num_output_buffers |
константная камера3_stream_buffer_t * | выходные_буферы |
константная камера3_stream_buffer_t * | входной_буфер |
uint32_t | частичный_результат |
Подробное описание
camera3_capture_result_t:
Результат однократного захвата/повторной обработки устройством HAL камеры. Это отправляется в платформу асинхронно с помощью функцииprocess_capture_result() в ответ на одиночный запрос захвата, отправленный в HAL с помощью функцииprocess_capture_request(). HAL может выполнить несколько вызововprocess_capture_result() для каждого запроса.
Каждый вызов с одинаковым номером кадра может содержать некоторое подмножество выходных буферов и/или метаданные результата. Метаданные могут быть предоставлены только один раз для данного номера кадра; все остальные вызовы должны устанавливать метаданные результата в NULL.
Структура результата содержит выходные метаданные этого захвата и набор выходных буферов, которые были или будут заполнены для этого захвата. Каждый выходной буфер может иметь ограничение синхронизации выпуска, которое платформа будет ожидать перед чтением, если буфер еще не заполнен HAL.
>= CAMERA_DEVICE_API_VERSION_3_2:
Метаданные могут предоставляться несколько раз для одного номера кадра. Платформа аккумулирует окончательный набор результатов, объединяя каждый частичный результат в общий набор результатов.
Если в запросе указан входной буфер, HAL должен вернуть его в одном из вызововprocess_capture_result, и вызов может заключаться в простом возврате входного буфера без метаданных и выходных буферов; ограничения синхронизации должны обрабатываться так же, как и для выходных буферов.
Соображения производительности:
Приложения также будут получать эти частичные результаты немедленно, поэтому отправка частичных результатов является настоятельно рекомендуемой оптимизацией производительности, чтобы избежать общей задержки конвейера перед отправкой результатов для того, что известно на самом раннем этапе конвейера.
Типичным вариантом использования может быть вычисление состояния AF на полпути конвейера; немедленно отправив состояние обратно в фреймворк, мы получим повышение производительности на 50 % и воспринимаемую отзывчивость автофокусировки.
Полевая документация
uint32_t номер_фрейма |
Номер кадра — это возрастающее целое число, установленное платформой в отправленном запросе для уникальной идентификации этого захвата. Он также используется для идентификации запроса в асинхронных уведомлениях, отправляемых в camera3_callback_ops_t.notify() .
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
Дескриптор буфера входного потока для этого захвата. Возможно, он еще не использован на момент вызова HAL процесса_capture_result(); платформа будет ожидать ограничений синхронизации выпуска, предоставляемых HAL, прежде чем повторно использовать буфер.
HAL должен обрабатывать ограничения синхронизации так же, как и для output_buffers.
Для каждого запроса разрешено отправлять только один входной буфер. Подобно выходным буферам, порядок возвращаемых входных буферов должен поддерживаться HAL.
Соображения производительности:
Входной буфер должен быть возвращен как можно раньше. Если HAL поддерживает ограничения синхронизации, он может вызвать процесс_capture_result, чтобы вернуть его с установленными соответствующим образом ограничениями синхронизации. Если ограничения синхронизации не поддерживаются, буфер можно вернуть только после его использования, что может занять много времени; HAL может решить скопировать этот входной буфер, чтобы буфер вернулся быстрее.
uint32_t num_output_buffers |
Количество выходных буферов, возвращаемых в этой структуре результата. Должно быть меньше или равно количеству соответствующих запросов на захват. Если это количество меньше, чем количество буферов в запросе захвата, необходимо выполнить хотя бы еще один вызов Process_capture_result с тем же номером кадра, чтобы вернуть оставшиеся выходные буферы в платформу. Это значение может быть равно нулю только в том случае, если структура включает действительные метаданные результата или в этом результате возвращается входной буфер.
const camera3_stream_buffer_t * output_buffers |
Дескрипторы буферов выходного потока для этого захвата. Они могут еще не быть заполнены на момент вызова HAL процесса_capture_result(); платформа будет ожидать ограничений синхронизации выпуска, предоставляемых HAL, прежде чем читать буферы.
HAL должен установить границу синхронизации освобождения буфера потока на действительный sync fd или на -1, если буфер уже заполнен.
Если HAL обнаруживает ошибку при обработке буфера и буфер не заполняется, поле состояния буфера должно быть установлено в CAMERA3_BUFFER_STATUS_ERROR. Если HAL не ждал на границе получения до обнаружения ошибки, границу получения следует скопировать в границу освобождения, чтобы позволить платформе ожидать на границе перед повторным использованием буфера.
Ограничитель захвата должен быть установлен на -1 для всех выходных буферов. Если num_output_buffers равно нулю, это может быть NULL. В этом случае HAL должен выполнить как минимум еще один вызовprocess_capture_result для предоставления выходных буферов.
Когда процесс_capture_result вызывается с новым буфером для кадра, все буферы предыдущих кадров для этого соответствующего потока уже должны быть доставлены (о границах еще не обязательно сигнализировать).
>= CAMERA_DEVICE_API_VERSION_3_2:
Буферы Gralloc для кадра могут быть отправлены в платформу до соответствующего уведомления SHUTTER.
Соображения производительности:
Буферы, доставленные в платформу, не будут отправляться на уровень приложения до тех пор, пока не будет получена временная метка начала экспозиции через вызов SHUTTER notify(). Настоятельно рекомендуется отправить этот звонок как можно раньше.
uint32_t частичный_результат |
>= CAMERA_DEVICE_API_VERSION_3_2:
Чтобы воспользоваться частичными результатами, HAL должен установить в статических метаданных android.request.partialResultCount количество частичных результатов, которые он будет отправлять для каждого кадра.
Каждый новый результат захвата с частичным результатом должен устанавливать в этом поле (partial_result) отдельное включающее значение от 1 до android.request.partialResultCount.
HAL, не желающие воспользоваться этой функцией, не должны устанавливать для android.request.partialResultCount или частичного_результата значение, отличное от 1.
Это значение должно быть установлено в 0, если результат захвата содержит только буферы и не содержит метаданных.
const camera_metadata_t * результат |
Метаданные результата для этого захвата. Он содержит информацию об окончательных параметрах захвата, состоянии оборудования захвата и постобработки, состоянии алгоритмов 3A, если они включены, и выводе любых включенных статистических блоков.
Только один вызов Process_capture_result() с заданным номером кадра может включать метаданные результата. Все остальные вызовы того же номера кадра должны установить это значение в NULL.
Если произошла ошибка при создании метаданных результата, результатом должен быть пустой буфер метаданных, а notify() должен быть вызван с ERROR_RESULT.
>= CAMERA_DEVICE_API_VERSION_3_2:
Множественные вызовы Process_capture_result() с заданным номером кадра могут включать метаданные результата.
Представленные частичные метаданные не должны включать в себя какой-либо ключ метаданных, возвращенный в предыдущем частичном результате для данного кадра. Каждый новый частичный результат для этого кадра также должен устанавливать отдельное значение частичного_результата.
Если уведомление было вызвано с ERROR_RESULT, все дальнейшие частичные результаты для этого кадра игнорируются платформой.
Документация для этой структуры была создана из следующего файла:
- Аппаратное обеспечение/libhardware/include/hardware/ camera3.h