Referencia de la estructura camera3_capture_result

Referencia de la estructura camera3_capture_result

#include < camera3.h >

Campos de datos

uint32_t  frame_number
 
const camera_metadata_t resultado
 
uint32_t  num_output_buffers
 
const camera3_stream_buffer_t output_buffers
 
const camera3_stream_buffer_t input_buffer
 
uint32_t  partial_result
 

Descripción detallada

camera3_capture_result_t:

Es el resultado de una sola captura o un solo procesamiento por parte del dispositivo HAL de la cámara. Se envía al framework de forma asíncrona con process_capture_result(), en respuesta a una sola solicitud de captura que se envía al HAL con process_capture_request(). El HAL puede realizar varias llamadas a process_capture_result() para cada solicitud.

Cada llamada, todas con el mismo número de fotogramas, puede contener un subconjunto de los búferes de salida o los metadatos del resultado. Los metadatos solo se pueden proporcionar una vez para un número de fotogramas determinado. Todas las demás llamadas deben establecer los metadatos del resultado como NULL.

La estructura del resultado contiene los metadatos de salida de esta captura y el conjunto de búferes de salida que se llenaron o se llenarán para esta captura. Cada búfer de salida puede incluir una cerca de sincronización de lanzamiento que el framework esperará antes de leer, en caso de que el HAL aún no haya llenado el búfer.

>= CAMERA_DEVICE_API_VERSION_3_2:

Los metadatos se pueden proporcionar varias veces para un solo número de fotograma. El framework acumulará el conjunto de resultados final combinando cada resultado parcial en el conjunto de resultados total.

Si se proporciona un búfer de entrada en una solicitud, el HAL debe devolverlo en una de las llamadas a process_capture_result, y la llamada puede ser solo para devolver el búfer de entrada, sin metadatos ni búferes de salida. Las cercas de sincronización se deben controlar de la misma manera que se hace para los búferes de salida.

Consideraciones sobre el rendimiento:

Las aplicaciones también recibirán estos resultados parciales de inmediato, por lo que enviar resultados parciales es una optimización de rendimiento muy recomendada para evitar la latencia total de la canalización antes de enviar los resultados de lo que se conoce muy al principio de la canalización.

Un caso de uso típico podría ser calcular el estado del enfoque automático a mitad de la canalización. Si enviamos el estado al framework de inmediato, obtenemos un aumento del 50% en el rendimiento y una mayor capacidad de respuesta del enfoque automático.

Definición en la línea 2251 del archivo camera3.h .

Documentación de campos

uint32_t frame_number

El número de fotogramas es un número entero incremental que establece el framework en la solicitud enviada para identificar de forma única esta captura. También se usa para identificar la solicitud en las notificaciones asíncronas que se envían a camera3_callback_ops_t.notify() .

Definición en la línea 2258 del archivo camera3.h .

const camera3_stream_buffer_t * input_buffer

>= CAMERA_DEVICE_API_VERSION_3_2:

Es el identificador del búfer de flujo de entrada para esta captura. Es posible que aún no se consuma en el momento en que HAL llama a process_capture_result(); el framework esperará en las cercas de sincronización de lanzamiento que proporciona el HAL antes de volver a usar el búfer.

El sistema HAL debe controlar las barreras de sincronización de la misma manera que se hace para output_buffers.

Solo se puede enviar un búfer de entrada por solicitud. Al igual que con los búferes de salida, el sistema HAL debe mantener el orden de los búferes de entrada que se devuelven.

Consideraciones sobre el rendimiento:

El búfer de entrada debe mostrarse lo antes posible. Si el HAL admite vallas de sincronización, puede llamar a process_capture_result para devolverlo con las vallas de sincronización configuradas de forma adecuada. Si no se admiten las cercas de sincronización, el búfer solo se puede mostrar cuando se consume, lo que puede tardar mucho tiempo. El HAL puede optar por copiar este búfer de entrada para que se muestre antes.

Definición en la línea 2361 del archivo camera3.h .

uint32_t num_output_buffers

Es la cantidad de búferes de salida que se muestran en esta estructura de resultados. Debe ser menor o igual que el recuento de la solicitud de captura coincidente. Si es menor que el recuento de búferes en la solicitud de captura, se debe realizar al menos una llamada más a process_capture_result con el mismo frame_number para devolver los búferes de salida restantes al framework. Solo puede ser cero si la estructura incluye metadatos de resultados válidos o si se muestra un búfer de entrada en este resultado.

Definición en la línea 2296 del archivo camera3.h .

const camera3_stream_buffer_t * output_buffers

Los identificadores de los búferes de flujo de salida para esta captura Es posible que aún no se hayan completado en el momento en que el HAL llama a process_capture_result(); el framework esperará en las barreras de sincronización de lanzamiento que proporciona el HAL antes de leer los búferes.

El sistema HAL debe establecer la cerca de sincronización de lanzamiento del búfer de transmisión en un fd de sincronización válido o en -1 si el búfer ya se llenó.

Si el sistema HAL encuentra un error mientras procesa el búfer y este no se completa, el campo de estado del búfer debe establecerse en CAMERA3_BUFFER_STATUS_ERROR. Si el sistema HAL no esperó en la zona de adquisición antes de encontrar el error, la zona de adquisición se debe copiar en la zona de liberación para permitir que el framework espere en la zona antes de volver a usar el búfer.

El cerco de adquisición debe establecerse en -1 para todos los búferes de salida. Si num_output_buffers es cero, puede ser NULO. En ese caso, el HAL debe realizar al menos una llamada más a process_capture_result para proporcionar los búferes de salida.

Cuando se llama a process_capture_result con un búfer nuevo para una trama, todos los búferes de tramas anteriores para esa transmisión correspondiente ya deben haberse entregado (no es necesario que se hayan indicado los cierres).

>= CAMERA_DEVICE_API_VERSION_3_2:

Los búferes de Gralloc para un fotograma se pueden enviar al framework antes de la notificación de SHUTTER correspondiente.

Consideraciones sobre el rendimiento:

Los búferes que se entreguen al framework no se enviarán a la capa de aplicación hasta que se reciba una marca de tiempo de inicio de exposición a través de una llamada notify() de SHUTTER. Se recomienda que envíes esa llamada lo antes posible.

Definición en la línea 2335 del archivo camera3.h .

uint32_t partial_result

>= CAMERA_DEVICE_API_VERSION_3_2:

Para aprovechar los resultados parciales, el HAL debe establecer los metadatos estáticos android.request.partialResultCount en la cantidad de resultados parciales que enviará para cada fotograma.

Cada resultado de captura nuevo con un resultado parcial debe establecer este campo (partial_result) en un valor inclusive distinto entre 1 y android.request.partialResultCount.

Los HAL que no deseen aprovechar esta función no deben establecer un android.request.partialResultCount o partial_result en un valor distinto de 1.

Este valor se debe establecer en 0 cuando un resultado de captura solo contiene búferes y no metadatos.

Definición en la línea 2381 del archivo camera3.h .

const camera_metadata_t * result

Son los metadatos del resultado de esta captura. Contiene información sobre los parámetros de captura finales, el estado del hardware de captura y posprocesamiento, el estado de los algoritmos de 3A, si están habilitados, y el resultado de cualquier unidad de estadísticas habilitada.

Solo una llamada a process_capture_result() con un frame_number determinado puede incluir los metadatos del resultado. Todas las demás llamadas para el mismo frame_number deben establecerlo en NULL.

Si se produjo un error al generar los metadatos del resultado, el resultado debe ser un búfer de metadatos vacío y se debe llamar a notify() con ERROR_RESULT.

>= CAMERA_DEVICE_API_VERSION_3_2:

Varias llamadas a process_capture_result() con un frame_number determinado pueden incluir los metadatos del resultado.

Los metadatos parciales enviados no deben incluir ninguna clave de metadatos que se haya devuelto en un resultado parcial anterior para un fotograma determinado. Cada resultado parcial nuevo para ese fotograma también debe establecer un valor de partial_result distinto.

Si se llamó a notify con ERROR_RESULT, el framework ignora todos los resultados parciales adicionales para ese fotograma.

Definición en la línea 2285 del archivo camera3.h .


La documentación de esta struct se generó a partir del siguiente archivo: