La función de parámetros de sesión reduce los retrasos, ya que permite que los clientes que usan cámaras configurar de forma activa el subconjunto de parámetros de solicitud costosos, es decir, la sesión como parte de la fase de inicialización de la sesión de captura. Con este las implementaciones de HAL reciben los parámetros del cliente durante la de transmisión en lugar de la primera solicitud de captura, según sus valores, preparar y crear más la canalización interna de forma eficiente.
En Android 10, puedes mejorar el rendimiento usando la función opcional de consulta de reconfiguración de sesión para obtener un mayor control del la lógica de reconfiguración de parámetros de sesión interna. Para obtener más información, consulta Consulta de reconfiguración de sesión.
Ejemplos y fuente
Una implementación de parámetros de sesión de referencia ya es parte del CameraHal) Esta HAL usa la API de Hal heredada. El modelo encuadernado CameraHal que implementa la API de HIDL de la cámara debe usar el HIDL respectivo sessionParams para acceder a los parámetros de sesión nuevos durante la configuración de la transmisión.
Los clientes de cámara pueden consultar las claves de todos los parámetros de sesión admitidos llamando
getAvailableSessionKeys()
y, finalmente, establecen sus valores iniciales a través de
setSessionParameters()
Implementación
Tu implementación de CameraHal debe propagar el
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
dentro de los metadatos respectivos de la cámara estática y proporcionan un subconjunto de
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
que contiene una lista de claves que son difíciles de aplicar por fotograma y pueden
pueden generar retrasos inesperados cuando se modifican durante la vida útil de la sesión de captura.
Entre los ejemplos típicos se incluyen parámetros que requieren un hardware lento o un cambio en la canalización interna de la cámara. Control de la sesión se pueden aplicar parámetros en las solicitudes de captura, pero los clientes deben estar al tanto y esperan retrasos en su app.
El framework supervisa todas las solicitudes entrantes y si detecta un cambio en la de un parámetro de sesión, se reconfigura internamente la cámara. La nueva herramienta la configuración de transmisión pasa a CameraHal y, luego, incluye la sesión actualizada. de parámetros, que se usan para configurar más la canalización de la cámara de forma eficiente.
Personalización
Puedes definir etiquetas en la lista de parámetros de sesión disponible que se propaga en el lado de CameraHal. Esta función no estará activa si CameraHal sale de la La lista de parámetros de sesión disponible está vacía.
Validación
CTS incluye los siguientes casos nuevos para probar parámetros de sesión:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
En general, después de que un parámetro determinado sea parte de la lista de claves de sesión, su El valor actual se incluye como parte de los parámetros de la sesión que se pasan durante la transmisión. configuración en la capa HAL.
Los parámetros de sesión deben seleccionarse con cuidado. Los valores no deben cambiar con frecuencia, si es que lo hacen, entre configuraciones de transmisión. Parámetros que cambian con frecuencia, como la intención de captura, no son adecuados y agregarlos a la La lista de parámetros de sesión podría causar errores de CTS debido a una cantidad excesiva de instancias la reconfiguración.
Consulta de reconfiguración de sesión
Android 10 introduce una sesión opcional
función de consulta de reconfiguración para
mejorar el rendimiento como las reconfiguraciones de la transmisión interna como resultado de la sesión
las modificaciones en los valores de los parámetros
pueden reducir el rendimiento. Para abordar esta inquietud,
HIDL
ICameraDeviceSession
versión 3.5 y las versiones posteriores son compatibles con
isReconfigurationRequired
que proporciona un control detallado sobre el parámetro de sesión interna
de reconfiguración. Con este método, puede ocurrir una reconfiguración de transmisión
precisamente cuando sea necesario.
Los argumentos de isReconfigurationRequired
Proporcionar la información obligatoria sobre cada parámetro de sesión pendiente
que permite realizar varios tipos de personalizaciones específicas del dispositivo.
Esta función solo se implementa en el servicio y la HAL de la cámara. Hay no existen APIs orientadas al público. Si se implementa esta función, los clientes de cámara ver mejoras en el rendimiento cuando se trabaja con los parámetros de sesión.
Implementación
Para admitir consultas de reconfiguración de sesión, debes implementar el
isReconfigurationRequired
para verificar si se requiere reconfiguración completa de la transmisión para nuevos
los valores del parámetro de sesión.
Si el cliente cambia el valor de cualquier parámetro de sesión anunciado, la cámara
framework llama a isReconfigurationRequired
. Según los valores específicos, la HAL decide si una operación
es necesario volver a configurar la transmisión. Si la HAL devuelve false
, la cámara
el framework omite la reconfiguración interna. Si la HAL devuelve true
, el
El framework reconfigura las transmisiones y pasa los nuevos valores de los parámetros de sesión.
según corresponda.
El framework puede llamar al método isReconfigurationRequired
en algún momento.
antes de que se envíe una solicitud con parámetros nuevos a la HAL y la solicitud
puede cancelarse antes de enviarla. Por lo tanto, la HAL no debe usar
llamada de método para cambiar su comportamiento de cualquier manera.
La implementación de HAL debe cumplir con los siguientes requisitos:
- El framework debe poder llamar al método
isReconfigurationRequired
. en cualquier momento después de la configuración de sesión activa. - No debe haber ningún impacto en el rendimiento de las solicitudes de cámara pendientes. En en particular, no debe haber fallas ni retrasos durante el funcionamiento normal de la cámara transmisión.
El dispositivo y la implementación de HAL deben cumplir con el siguiente rendimiento requisitos:
- No se deben cambiar los parámetros de configuración de la cámara de hardware y software.
- No debe haber un impacto visible para el usuario en el rendimiento de la cámara.
El isReconfigurationRequired
usa los siguientes argumentos:
oldSessionParams
: Parámetros de sesión de la sesión anterior Por lo general, son los parámetros de la sesión existente.newSessionParams
: Son los parámetros de sesión nuevos que establece el cliente.
Los códigos de estado de devolución esperados son los siguientes:
OK
: Se requiere la reconfiguración correcta.METHOD_NOT_SUPPORTED
: El dispositivo de la cámara no admite el consulta de reconfiguración.INTERNAL_ERROR
: La consulta de reconfiguración no se puede completar debido a un error interno.
Los valores que se muestran son los siguientes:
true
: Se requiere reconfigurar la transmisión.false
: No es necesario volver a configurar la transmisión.
Para ignorar una consulta de reconfiguración de sesión, la HAL muestra
METHOD_NOT_SUPPORTED
o false
. Esto da como resultado el servicio de cámara predeterminado
en el que la reconfiguración de la transmisión se activa en cada parámetro de sesión.
cambio.
Validación
La función de consulta de reconfiguración de sesión se puede validar con la prueba de VTS
caso en
CameraHidlTest#configureStreamsWithSessionParameters