Android 10 presenta funciones que permiten a los clientes de la cámara elegir transmisiones de cámara óptimas para casos de uso específicos y garantizar que el dispositivo de la cámara admita ciertas combinaciones de transmisión. Una configuración de flujo se refiere a un solo flujo de cámara configurado en el dispositivo de cámara y una combinación de flujo se refiere a uno o más conjuntos de flujos configurados en el dispositivo de cámara. Para obtener más información sobre estas funciones, consulte las configuraciones de transmisión recomendadas y la API para consultar combinaciones de transmisión .
Implementación de referencia
Existe una implementación de referencia del lado del proveedor de los flujos de configuración recomendados y la API para consultar las funciones de combinación de flujo. Puede encontrar esta implementación en QCamera3HWI.cpp
Configuraciones de transmisión recomendadas
Los proveedores de cámaras pueden anunciar configuraciones de transmisión recomendadas para casos de uso específicos para clientes de cámaras. Estas configuraciones de transmisión recomendadas, que son subconjuntos de StreamConfigurationMap , pueden ayudar a los clientes de cámara a elegir configuraciones óptimas.
Aunque StreamConfigurationMap proporciona información exhaustiva sobre la configuración de la transmisión a los clientes de la cámara, no proporciona ninguna información sobre la eficiencia, la potencia o los impactos en el rendimiento de elegir una transmisión sobre otra. Los clientes de la cámara pueden elegir libremente entre todas las configuraciones de transmisión posibles, pero en muchos casos, esto lleva a los clientes a utilizar configuraciones de cámara subóptimas y aplicaciones que realizan búsquedas exhaustivas que consumen mucho tiempo.
Por ejemplo, aunque se requieren algunos formatos YUV procesados y deben ser compatibles, es posible que el dispositivo de la cámara no tenga soporte nativo para los formatos. Esto da como resultado un paso de procesamiento adicional para la conversión de formato y reduce la eficiencia. El tamaño y la relación de aspecto correspondiente también pueden tener un impacto similar, lo que hace que determinadas dimensiones sean preferibles en términos de potencia y rendimiento.
No es necesario que los mapas de configuración de transmisión recomendados sean exhaustivos en comparación con StreamConfigurationMap . Los mapas de configuración sugeridos deben seguir los requisitos de la sección de implementación y pueden incluir cualquiera de los formatos, tamaños u otros valores disponibles que se encuentran en StreamConfigurationMap . Los formatos, tamaños u otros valores ocultos que no se encuentran en StreamConfigurationMap no se pueden incluir en los mapas de configuración de transmisión recomendados.
Todas las pruebas permanecen sin cambios y no se relajan según las configuraciones de transmisión recomendadas.
Las configuraciones de transmisión recomendadas proporcionadas por la implementación de la cámara son opcionales y el cliente de la cámara puede ignorarlas.
Implementación
Siga estos pasos para implementar esta función.
Entradas de metadatos
Para habilitar esta función, la cámara HAL debe completar las siguientes entradas de metadatos estáticos:
android.scaler.availableRecommendedStreamConfigurations
: el subconjunto recomendado de configuraciones de transmisión para casos de uso específicos. La declaración utiliza mapas de bits simples que indican los casos de uso sugeridos en forma de[1 << PREVIEW | 1 << RECORD..]
. Los casos de uso amplían la tupla regular (formato, ancho, alto, entrada) con una entrada adicional. Los casos de uso público inexistentes o cualquier otro conjunto de bits dentro del rango[PUBLIC_END, VENDOR_START]
están prohibidos.Esta información se almacena en la etiqueta de metadatos
availableRecommendedStreamConfigurations
.El siguiente ejemplo muestra una matriz para una configuración de transmisión recomendada para un dispositivo de cámara que solo admite 4K y 1080p, donde se prefieren ambas resoluciones para la grabación de video, pero solo se sugiere 1080p para la vista previa.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(disponible solo si el dispositivo lo admite): las configuraciones de flujo de espacio de datos de profundidad recomendadas sugeridas para este dispositivo de cámara. Similar a la entrada de metadatos anterior, un mapa de bits de caso de uso adicional indica los casos de uso sugeridos.Esta información se almacena en la etiqueta de metadatos
availableRecommendedInputOutputFormatsMap
.android.scaler.availableRecommendedInputOutputFormatsMap
(disponible solo si el dispositivo lo admite): la asignación de formatos de imagen recomendados que se sugieren para este dispositivo de cámara para flujos de entrada, a sus formatos de salida correspondientes.Esta información se almacena en la etiqueta de metadatos
availableRecommendedDepthStreamConfigurations
.
Esta información está disponible para los clientes de cámaras a través de la API PublishedStreamConfigurationMap.
Casos de uso requeridos
Se deben proporcionar configuraciones de flujo recomendadas para los siguientes casos de uso y cumplir con los requisitos correspondientes:
caso de uso | Requisito |
---|---|
PREVIEW | Una vista previa solo debe incluir configuraciones de transmisiones procesadas que no se detengan con formatos de salida como YUV_420_888 e IMPLEMENTATION_DEFINED . |
RECORD | Una grabación de video debe incluir configuraciones de transmisión que coincidan con los perfiles de medios admitidos anunciados con el formato IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT | Una instantánea de video debe incluir configuraciones de transmisión que sean al menos tan grandes como las resoluciones máximas de RECORD y solo con la combinación de formato/espacio de datos (JPEG) BLOB + DATASPACE_JFIF. Las configuraciones no deberían causar fallas en la vista previa y deberían poder ejecutarse a 30 fps. |
SNAPSHOT | Las configuraciones de transmisión de instantáneas deben incluir al menos una con un tamaño cercano a android.sensor.info.activeArraySize con la combinación de formato/espacio de datos (JPEG) BLOB + DATASPACE_JFIF. Teniendo en cuenta las restricciones sobre la relación de aspecto, la alineación y otras restricciones específicas del proveedor, el área del tamaño máximo sugerido no debe ser inferior al 97 % del área del tamaño de la matriz de sensores. |
ZSL (si es compatible) | Si el dispositivo de la cámara lo admite, las configuraciones de flujo de entrada recomendadas solo deben anunciarse junto con otros formatos de salida procesados o estancados. |
RAW (si es compatible) | Si es compatible con el dispositivo de la cámara, las configuraciones de transmisión sin formato recomendadas solo deben incluir formatos de salida basados en RAW. |
Otros casos de uso
Puede proporcionar secuencias de configuración recomendadas adicionales para casos de uso específicos de su implementación.
Validación
Para probar su implementación de los flujos de configuración recomendados, ejecute las siguientes pruebas CTS y VTS:
API para consultar combinaciones de secuencias
La plataforma Android admite una API para consultar combinaciones de secuencias. La implementación de esta API permite a los clientes de cámaras consultar de forma segura las combinaciones de transmisión en cualquier momento después de recibir una instancia válida de CameraDevice , lo que elimina la sobrecarga de inicializar una sesión de captura de cámara y la posibilidad de tener excepciones de cámara posteriores, incluida la rotura de la cámara, y permite consultas más rápidas.
Esta característica también permite que los clientes de cámaras reciban una lista de combinaciones de secuencias compiladas de acuerdo con las pautas para CameraDevice y el nivel de HW admitido. Las pruebas CTS están disponibles para hacer cumplir la corrección de los resultados de la consulta tanto como sea posible, cubriendo un subconjunto menor de las combinaciones de secuencias más comunes.
Puede optar por admitir esta función implementando una llamada API HIDL adicional en la HAL de la cámara.
Implementación
Para admitir una API para consultar combinaciones de secuencias, la HAL de la cámara debe proporcionar una implementación para la interfaz API isStreamCombinationSupported
isStreamCombinationSupported. Esta interfaz verifica si el dispositivo de la cámara admite una combinación de flujo de cámara específica.
Cuando se llama, la API debe devolver uno de los siguientes códigos de estado:
-
OK
: la consulta de combinación de transmisión se realizó correctamente. -
METHOD_NOT_SUPPORTED
: el dispositivo de la cámara no admite la consulta de combinación de transmisión. -
INTERNAL_ERROR
: la consulta de combinación de transmisión no se puede completar debido a un error interno.
La API devuelve verdadero si se admite la combinación de transmisión. De lo contrario, devuelve falso.
El marco utiliza la API pública isSessionConfigurationSupported
para verificar si la configuración de sesión en particular es compatible con el dispositivo de la cámara.
Las llamadas a la API no deben tener efectos secundarios en el funcionamiento normal de la cámara. Las llamadas API no deben alterar ningún estado interno ni ralentizar el rendimiento de la cámara. Asegúrese de que después de que Camera HAL valide con éxito una combinación de transmisión, los clientes de la cámara puedan configurar correctamente la combinación de transmisión. Para evitar problemas, asegúrese de que la implementación no almacene ninguna información durante las consultas de combinación de secuencias, cambie su estado interno o participe en operaciones que consumen mucho tiempo.
Validación
Para validar esta función, ejecute los siguientes casos de prueba de cámara CTS y VTS:
Módulos de cámara CTS:
Cámara VTS: