camera3_capture_result Referencia de estructura
#include < camera3.h >
Campos de información | |
uint32_t | número de cuadro |
constante cámara_metadatos_t * | resultado |
uint32_t | num_output_buffers |
cámara constante3_stream_buffer_t * | buffers_salida |
cámara constante3_stream_buffer_t * | búfer_entrada |
uint32_t | resultado_parcial |
Descripción detallada
cámara3_capture_result_t:
El resultado de una única captura/reprocesamiento por parte del dispositivo de cámara HAL. Esto se envía al marco de forma asincrónica con Process_capture_result(), en respuesta a una única solicitud de captura enviada a HAL con Process_capture_request(). HAL puede realizar múltiples llamadas a Process_capture_result() para cada solicitud.
Cada llamada, todas con el mismo número de fotograma, puede contener algún subconjunto de los buffers de salida y/o los metadatos del resultado. Los metadatos sólo pueden proporcionarse una vez para un número de fotograma determinado; todas las demás llamadas deben establecer los metadatos del resultado en NULL.
La estructura de resultados contiene los metadatos de salida de esta captura y el conjunto de búferes de salida que se han llenado o se llenarán para esta captura. Cada búfer de salida puede venir con un límite de sincronización de liberación que el marco esperará antes de leer, en caso de que HAL aún no haya llenado el búfer.
>= CAMERA_DEVICE_API_VERSION_3_2:
Los metadatos se pueden proporcionar varias veces para un único número de fotograma. El marco 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, HAL debe devolverlo en una de las llamadas Process_capture_result, y la llamada puede ser simplemente para devolver el búfer de entrada, sin metadatos ni búferes de salida; las barreras de sincronización deben manejarse de la misma manera que se hacen para los buffers de salida.
Consideraciones de rendimiento:
Las aplicaciones también recibirán estos resultados parciales de inmediato, por lo que enviar resultados parciales es una optimización del rendimiento muy recomendada para evitar la latencia total del proceso antes de enviar los resultados de lo que se sabe en una etapa muy temprana del proceso.
Un caso de uso típico podría ser calcular el estado de AF en la mitad del proceso; Al enviar el estado de vuelta al marco inmediatamente, obtenemos un aumento del rendimiento del 50% y una capacidad de respuesta percibida del enfoque automático.
Documentación de campo
uint32_t número_cuadro |
El número de fotograma es un número entero incremental establecido por el marco en la solicitud enviada para identificar de forma única esta captura. También se utiliza para identificar la solicitud en notificaciones asincrónicas enviadas a camera3_callback_ops_t.notify() .
const cámara3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
El identificador del búfer de flujo de entrada para esta captura. Es posible que aún no se haya consumido en el momento en que HAL llame a Process_capture_result(); el marco esperará las barreras de sincronización de liberación proporcionadas por HAL antes de reutilizar el búfer.
HAL debe manejar las barreras de sincronización de la misma manera que lo hace para los buffers de salida.
Solo se permite enviar un búfer de entrada por solicitud. De manera similar a los buffers de salida, el HAL debe mantener el orden de los buffers de entrada devueltos.
Consideraciones de rendimiento:
El búfer de entrada debe devolverse lo antes posible. Si HAL admite barreras de sincronización, puede llamar a Process_capture_result para devolverlo con las barreras de sincronización configuradas adecuadamente. Si no se admiten barreras de sincronización, el búfer solo se puede devolver cuando se consume, lo que puede llevar mucho tiempo; HAL puede optar por copiar este búfer de entrada para que el búfer regrese antes.
uint32_t num_output_buffers |
El número de búferes de salida devueltos en esta estructura de resultados. Debe ser menor o igual que el recuento de la solicitud de captura coincidente. Si esto es menor que el recuento de búfer 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 marco. Esto solo puede ser cero si la estructura incluye metadatos de resultados válidos o si se devuelve un búfer de entrada en este resultado.
const camera3_stream_buffer_t * salida_buffers |
Los identificadores de los buffers del flujo de salida para esta captura. Es posible que aún no estén completos en el momento en que HAL llama a Process_capture_result(); el marco esperará las barreras de sincronización de lanzamiento proporcionadas por HAL antes de leer los buffers.
HAL debe establecer el límite de sincronización de liberación del búfer de transmisión en un fd de sincronización válido, o en -1 si el búfer ya se ha llenado.
Si HAL encuentra un error al procesar el búfer y el búfer no está lleno, el campo de estado del búfer debe establecerse en CAMERA3_BUFFER_STATUS_ERROR. Si HAL no esperó en el límite de adquisición antes de encontrar el error, el límite de adquisición se debe copiar en el límite de liberación para permitir que el marco espere en el límite antes de reutilizar el búfer.
El límite de adquisición debe establecerse en -1 para todos los búferes de salida. Si num_output_buffers es cero, puede ser NULL. En ese caso, HAL debe realizar al menos una llamada más a Process_capture_result para proporcionar los buffers de salida.
Cuando se llama a Process_capture_result con un nuevo buffer para un fotograma, todos los buffers de fotogramas anteriores para ese flujo correspondiente ya deben haberse entregado (no es necesario que las barreras hayan sido señalizadas aún).
>= CAMERA_DEVICE_API_VERSION_3_2:
Los buffers Gralloc para una trama se pueden enviar al framework antes de la notificación SHUTTER correspondiente.
Consideraciones de rendimiento:
Los buffers entregados al marco no se enviarán a la capa de aplicación hasta que se haya recibido una marca de tiempo de inicio de exposición a través de una llamada SHUTTER notify(). Se recomienda encarecidamente enviar esa llamada lo antes posible.
uint32_t resultado_parcial |
>= CAMERA_DEVICE_API_VERSION_3_2:
Para aprovechar los resultados parciales, HAL debe configurar los metadatos estáticos android.request.partialResultCount en la cantidad de resultados parciales que enviará para cada cuadro.
Cada nuevo resultado de captura con un resultado parcial debe establecer este campo (partial_result) en un valor inclusivo distinto entre 1 y android.request.partialResultCount.
Los HAL que no deseen aprovechar esta función no deben establecer android.request.partialResultCount o parcial_result en un valor distinto de 1.
Este valor se debe establecer en 0 cuando el resultado de una captura contiene solo búferes y no metadatos.
const camera_metadata_t * resultado |
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 3A, si están habilitados, y la salida de cualquier unidad estadística 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 hubo un error al producir 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 devuelta en un resultado parcial anterior para un marco determinado. Cada nuevo resultado parcial para ese marco también debe establecer un valor de resultado parcial distinto.
Si se ha llamado a notificar con ERROR_RESULT, el marco ignora todos los resultados parciales adicionales para ese marco.
La documentación para esta estructura se generó a partir del siguiente archivo:
- hardware/libhardware/include/hardware/ camera3.h