La función de parámetros de sesión reduce los retrasos al permitir que los clientes de cámara configuren activamente el subconjunto de parámetros de solicitud costosos, es decir, parámetros de sesión, como parte de la fase de inicialización de la sesión de captura. Con esta función, sus implementaciones de HAL reciben los parámetros del cliente durante la fase de configuración de la transmisión en lugar de la primera solicitud de captura y pueden, según sus valores, preparar y construir la canalización interna de manera más eficiente.
En Android 10, puede mejorar el rendimiento mediante el uso de la función de consulta de reconfiguración de sesión opcional para tener más control sobre la lógica de reconfiguración de parámetros de sesión interna. Para obtener más información, consulte Consulta de reconfiguración de sesión .
Ejemplos y fuente
Una implementación de parámetros de sesión de referencia ya forma parte de CameraHal . Esta HAL usa la API Hal heredada. El CameraHal encuadernado que implementa la API HIDL de la cámara debe usar la entrada correspondiente de HIDL sessionParams para acceder a cualquier nuevo parámetro de sesión entrante durante la configuración de la transmisión.
Los clientes de la cámara pueden consultar las claves de todos los parámetros de sesión compatibles llamando a getAvailableSessionKeys()
y eventualmente establecer sus valores iniciales a través setSessionParameters()
.
Implementación
Su implementación de CameraHal debe ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
dentro de los metadatos de cámara estáticos respectivos y proporcionar un subconjunto de ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
, que contiene una lista de claves que son difíciles de aplicar por cuadro y pueden generar retrasos inesperados cuando se modifican durante la duración de la sesión de captura.
Los ejemplos típicos incluyen parámetros que requieren una reconfiguración de hardware que requiere mucho tiempo o un cambio de tubería de cámara interna. Todavía se puede ejercer el control sobre los parámetros de la sesión en las solicitudes de captura, pero los clientes deben conocer y esperar retrasos en su aplicación.
El marco supervisa todas las solicitudes entrantes y, si detecta un cambio en el valor de un parámetro de sesión, reconfigura internamente la cámara. La nueva configuración de transmisión que se pasa a CameraHal incluye los valores de los parámetros de sesión actualizados, que se utilizan para configurar la canalización de la cámara de manera más eficiente.
personalización
Puede definir etiquetas en la lista de parámetros de sesión disponibles que se completa en el lado de CameraHal. Esta función no está activa si CameraHal deja vacía la lista de parámetros de sesión disponibles.
Validación
CTS incluye los siguientes casos nuevos para probar los parámetros de la sesión:
-
CameraDeviceTest#testSessionConfiguration
-
CameraDeviceTest#testCreateSessionWithParameters
-
CameraDeviceTest#testSessionParametersStateLeak
-
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
En general, después de que cierto parámetro sea parte de la lista de claves de la sesión, su valor actual se incluye como parte de los parámetros de la sesión pasados durante la configuración del flujo en la capa HAL.
Los parámetros de sesión deben seleccionarse cuidadosamente. Los valores no deben cambiar con frecuencia, si es que lo hacen, entre configuraciones de transmisión. Los parámetros que cambian con frecuencia, como la intención de captura, no son adecuados y agregarlos a la lista de parámetros de la sesión podría causar fallas de CTS debido a una reconfiguración interna excesiva.
Consulta de reconfiguración de sesión
Android 10 presenta una función de consulta de reconfiguración de sesión opcional para mejorar el rendimiento, ya que las reconfiguraciones de flujo interno resultantes de las modificaciones de los valores de los parámetros de la sesión pueden reducir el rendimiento. Para solucionar este problema, la versión 3.5 y posteriores de HIDL ICameraDeviceSession
admiten el método isReconfigurationRequired
, que proporciona un control detallado sobre la lógica de reconfiguración de los parámetros de la sesión interna. Con este método, la reconfiguración de flujo puede ocurrir precisamente cuando sea necesario.
Los argumentos para isReconfigurationRequired
brindan la información requerida sobre cada modificación de parámetro de sesión pendiente, lo que permite varios tipos de personalizaciones específicas del dispositivo.
Esta función se implementa solo en el servicio de cámara y la cámara HAL. No hay API públicas. Si se implementa esta característica, los clientes de la cámara deberían ver mejoras en el rendimiento al trabajar con los parámetros de la sesión.
Implementación
Para admitir consultas de reconfiguración de sesión, debe implementar el método isReconfigurationRequired
para verificar si se requiere una reconfiguración de transmisión completa para los nuevos valores de parámetros de sesión.
Si el cliente cambia el valor de cualquier parámetro de sesión anunciado, el marco de la cámara llama al método isReconfigurationRequired
. Dependiendo de los valores específicos, HAL decide si se requiere una reconfiguración de flujo completa. Si HAL devuelve false
, el marco de la cámara omite la reconfiguración interna. Si HAL devuelve true
, el marco vuelve a configurar los flujos y pasa los nuevos valores de parámetros de sesión en consecuencia.
El marco puede llamar al método isReconfigurationRequired
algún tiempo antes de que se envíe una solicitud con nuevos parámetros a la HAL, y la solicitud se puede cancelar antes de que se envíe. Por lo tanto, HAL no debe usar esta llamada de método para cambiar su comportamiento de ninguna manera.
La implementación de HAL debe cumplir con los siguientes requisitos:
- El marco debe poder llamar al método
isReconfigurationRequired
en cualquier momento después de la configuración de la sesión activa. - No debe haber ningún impacto en el rendimiento de las solicitudes de cámara pendientes. En particular, no debe haber fallas ni retrasos durante la transmisión normal de la cámara.
El dispositivo y la implementación de HAL deben cumplir los siguientes requisitos de rendimiento:
- Los ajustes de hardware y software de la cámara no deben cambiarse.
- No debe haber un impacto visible para el usuario en el rendimiento de la cámara.
El método isReconfigurationRequired
toma los siguientes argumentos:
-
oldSessionParams
: Parámetros de sesión de la sesión anterior. Por lo general, los parámetros de sesión existentes. -
newSessionParams
: nuevos parámetros de sesión que establece el cliente.
Los códigos de estado de devolución esperados son:
-
OK
: Se requiere reconfiguración exitosa consulta. -
METHOD_NOT_SUPPORTED
: el dispositivo de la cámara no admite la consulta de reconfiguración. -
INTERNAL_ERROR
: la consulta de reconfiguración no se puede completar debido a un error interno.
Los valores devueltos son:
-
true
: se requiere la reconfiguración de la transmisión. -
false
: no es necesaria la reconfiguración de la transmisión.
Para ignorar una consulta de reconfiguración de sesión, HAL devuelve METHOD_NOT_SUPPORTED
o false
. Esto da como resultado el comportamiento del servicio de cámara predeterminado donde la reconfiguración de la transmisión se activa en cada cambio de parámetro de la sesión.
Validación
La función de consulta de reconfiguración de sesión se puede validar mediante el caso de prueba de VTS en CameraHidlTest#configureStreamsWithSessionParameters
.