Configuraciones de transmisión

Android incluye 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 cámara admita ciertas combinaciones de transmisiones. Una configuración de transmisión de la cámara se refiere a una sola transmisión de la cámara configurada en el dispositivo de cámara, y una combinación de transmisiones de la cámara se refiere a uno o más conjuntos de transmisiones de la cámara configuradas en el dispositivo de cámara. Para obtener más información sobre estas funciones, consulta las configuraciones de transmisión recomendadas y la API para consultar combinaciones de funciones.

Implementación de referencia

Existe una implementación de referencia del lado del proveedor de las transmisiones de configuración recomendadas y la API para consultar las funciones de combinación de transmisiones. Puedes encontrar esta implementación en QCamera3HWI.cpp.

Los proveedores de cámaras pueden anunciar configuraciones de transmisión recomendadas para casos de uso específicos a los clientes de la cámara. Estas configuraciones de transmisión recomendadas, que son subconjuntos de StreamConfigurationMap, pueden ayudar a los clientes de la cámara a elegir configuraciones óptimas.

Aunque StreamConfigurationMap proporciona información exhaustiva sobre la configuración de transmisión a los clientes de la cámara, no proporciona información sobre la eficiencia, la energía ni los impactos en el rendimiento de elegir una transmisión en lugar de otra. Los clientes de la cámara pueden elegir libremente entre todas las configuraciones de transmisión posibles, pero, en muchos casos, esto hace que los clientes usen configuraciones de cámara no óptimas y que las apps realicen 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 cámara no tenga compatibilidad nativa con los formatos. Esto genera 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 ciertas dimensiones sean preferibles en términos de energía y rendimiento.

No es necesario que tus mapas de configuración de transmisión recomendados sean exhaustivos en comparación con StreamConfigurationMap. Los mapas de configuración sugeridos deben cumplir con los requisitos de la sección de implementación y pueden incluir cualquiera de los formatos, tamaños o valores disponibles que se encuentran en StreamConfigurationMap. Los formatos, tamaños o 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 que proporciona la implementación de la cámara son opcionales, y el cliente de la cámara puede ignorarlas.

Implementación

Sigue estos pasos para implementar esta función.

Entradas de metadatos

Para habilitar esta función, la HAL de la cámara debe propagar las siguientes entradas de metadatos estáticos:

  • android.scaler.availableRecommendedStreamConfigurations: Es el subconjunto recomendado de configuraciones de transmisión para casos de uso específicos. La declaración usa mapas de bits que indican los casos de uso sugeridos en forma de [1 << PREVIEW | 1 << RECORD..]. Los casos de uso extienden la tupla normal (formato, ancho, alto, entrada) con una entrada adicional. Se prohíben los casos de uso públicos no existentes o cualquier otro bit establecido dentro del rango [PUBLIC_END, VENDOR_START].

    Esta información se almacena en la availableRecommendedStreamConfigurations etiqueta de metadatos.

    En el siguiente ejemplo, se muestra un array para una configuración de transmisión recomendada para un dispositivo de cámara que solo admite 4K y 1080p, en el que 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): Son las configuraciones de transmisión de espacio de datos de profundidad recomendadas que se sugieren para este dispositivo de cámara. Al igual que 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 availableRecommendedInputOutputFormatsMap etiqueta de metadatos.

  • android.scaler.availableRecommendedInputOutputFormatsMap (disponible solo si el dispositivo lo admite): Es la asignación de formatos de imagen recomendados que se sugieren para este dispositivo de cámara para transmisiones de entrada a sus formatos de salida correspondientes.

    Esta información se almacena en la availableRecommendedDepthStreamConfigurations etiqueta de metadatos.

Esta información está disponible para los clientes de la cámara a través de la API de RecommendedStreamConfigurationMap.

Casos de uso obligatorios

Se deben proporcionar configuraciones de transmisión 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 transmisión procesadas que no se detengan con formatos de salida como YUV_420_888 y 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 RECORD máximas y solo con la combinación de formato o espacio de datos BLOB + DATASPACE_JFIF (JPEG). Las configuraciones no deben causar fallas en la vista previa y deben 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 o espacio de datos BLOB + DATASPACE_JFIF (JPEG). Si se tienen 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 del array de sensores.
ZSL (si es compatible) Si el dispositivo de cámara lo admite, las configuraciones de transmisión de entrada recomendadas solo se deben anunciar junto con otros formatos de salida procesados o detenidos.
RAW (si es compatible) Si el dispositivo de cámara lo admite, las configuraciones de transmisión sin procesar recomendadas solo deben incluir formatos de salida basados en RAW.

Otros casos prácticos

Puedes proporcionar transmisiones de configuración recomendadas adicionales para casos de uso específicos de tu implementación.

Validación

Para probar tu implementación de las transmisiones de configuración recomendadas, ejecuta las siguientes pruebas de CTS y VTS:

API para consultar combinaciones de funciones

A partir de Android 15, la plataforma de Android proporciona una API para consultar combinaciones de funciones. Esta API permite que los clientes de la cámara consulten si el dispositivo puede admitir una combinación de funciones especificada. Esta API es necesaria porque la API de Camera2 modela diferentes funciones, como 4K, 60 fps, video HDR, UltraHDR, zoom ultra gran angular y estabilización como controles ortogonales.

Requisitos

Para admitir la API para consultar combinaciones de funciones, la HAL de la cámara debe implementar la versión 3 de la interfaz ICameraDevice. Para obtener más información, consulta la sección Implementación.

Cuando se admite la API, la estabilización de la vista previa debe ser ortogonal a otras funciones. Esto significa que, para un dispositivo de cámara que admite la estabilización de la vista previa, el valor que muestra isStreamCombinationWithSettingsSupported para una combinación en particular debe ser el mismo valor cuando la estabilización de la vista previa está activada o desactivada. Esto reduce el espacio de búsqueda para las consultas de combinación de funciones.

Además, para la clase de rendimiento de medios 15, la cámara posterior principal debe admitir la estabilización de la vista previa con una vista previa HLG10 de 10 bits para la vista previa de 1080p y 720p, y los JPEG de tamaño máximo. Para obtener más detalles sobre estos requisitos, consulta la sección 2.2.7.2. Cámara del CDD.

Implementación

Para admitir la API para consultar combinaciones de funciones, implementa las siguientes APIs de consulta de combinación de funciones en la versión 3 de ICameraDevice:

Para las versiones inferiores a la versión 3 de la interfaz ICameraDevice, la HAL debe implementar el isStreamCombinationSupported método.

Para obtener más información sobre las combinaciones de funciones que consulta la API, consulta la documentación sobre sessionConfigurationQueryVersion en system/media/camera/docs/metadata_definitions.xml.

Para obtener una implementación de referencia de esta función, consulta hardware/google/camera/devices/EmulatedCamera/hwl/.

APIs públicas

Las apps pueden usar las siguientes APIs públicas para consultar las combinaciones de funciones admitidas para el dispositivo:

  • CameraDevice.CameraDeviceSetup: Es una representación limitada de CameraDevice que se puede usar para consultar combinaciones de funciones sin necesidad de una instancia de CameraDevice.

  • getCameraDeviceSetup: Adquiere un objeto CameraDeviceSetup para un ID de cámara determinado si isCameraDeviceSetupSupported muestra true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Admite consultas de combinación de funciones si este valor es VANILLA_ICE_CREAM o superior.

  • OutputConfiguration: Es una clase que describe la salida de la cámara, que puede contener una superficie diferida con el propósito de realizar consultas de combinación de funciones de baja latencia.

  • SessionConfiguration: Es una clase de utilidad que describe la configuración de la sesión, incluidas las combinaciones de transmisión y los parámetros de la sesión, que se pueden usar para las consultas de combinación de funciones.

Validación

Para validar tu implementación de esta función, usa las siguientes pruebas de VTS, CTS y Camera ITS (CTS Verifier):

VTS

CTS

Camera ITS