Configuraciones de transmisión

Android 10 introduce funciones que permiten a los clientes de 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 se refiere a una única transmisión de cámara configurada en el dispositivo de cámara y una combinación de transmisiones se refiere a uno o más conjuntos de transmisiones configuradas 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 transmisiones .

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 características de combinación de flujos. Puede encontrar esta implementación en QCamera3HWI.cpp

Los proveedores de cámaras pueden anunciar a los clientes de cámaras las configuraciones de transmisión recomendadas para casos de uso específicos. 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 la transmisión a los clientes de la cámara, no proporciona ninguna información sobre los impactos en la eficiencia, la potencia o el rendimiento al 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 que los clientes utilicen configuraciones de cámara subóptimas y aplicaciones que realicen búsquedas exhaustivas que consumen mucho tiempo.

Por ejemplo, aunque algunos formatos YUV procesados ​​son necesarios y deben ser compatibles, es posible que el dispositivo de la cámara no sea compatible de forma nativa con esos 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, haciendo 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 característica.

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 normal (formato, ancho, alto, entrada) con una entrada adicional. Están prohibidos 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 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. De manera similar a la entrada de metadatos anterior, un mapa de bits de casos 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 transmisiones 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 RecommendationStreamConfigurationMap .

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 transmisión procesadas que no se detengan con formatos de salida como YUV_420_888 e IMPLEMENTATION_DEFINED .
RECORD Un registro 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 vídeo 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 BLOB + DATASPACE_JFIF (JPEG). Las configuraciones no deberían causar problemas de vista previa y deberían poder ejecutarse a 30 fps.
SNAPSHOT Las configuraciones de secuencias 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 BLOB + DATASPACE_JFIF (JPEG). 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 del conjunto de sensores.
ZSL (si es compatible) Si el dispositivo de la cámara las 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 el dispositivo de la cámara lo admite, las configuraciones de transmisión sin formato recomendadas solo deben incluir formatos de salida basados ​​en RAW.

Otros casos de uso

Puede proporcionar flujos de configuración recomendados 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 flujos

La plataforma Android admite una API para consultar combinaciones de transmisiones. La implementación de esta API permite a los clientes de cámara consultar de forma segura combinaciones de secuencias en cualquier momento después de recibir una instancia de CameraDevice válida, eliminando 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 permitiendo consultas más rápidas.

Esta característica también permite a los clientes de cámara recibir una lista de combinaciones de transmisiones compiladas de acuerdo con las pautas para CameraDevice y el nivel de HW admitido. Las pruebas CTS están disponibles para hacer cumplir la exactitud de los resultados de la consulta tanto como sea posible, cubriendo un subconjunto menor de las combinaciones de flujos más comunes.

Puede optar por admitir esta función implementando una llamada API HIDL adicional en Camera HAL.

Implementación

Para admitir una API para consultar combinaciones de transmisiones, Camera HAL debe proporcionar una implementación para la interfaz API HIDL isStreamCombinationSupported . Esta interfaz comprueba si el dispositivo de la cámara admite una combinación de transmisión 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 secuencias 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 secuencias no se puede completar debido a un error interno.

La API devuelve verdadero si se admite la combinación de secuencias. De lo contrario, devuelve falso.

El marco utiliza la API pública isSessionConfigurationSupported para verificar si la configuración de sesión particular es compatible con el dispositivo de la cámara.

Las llamadas a la API no deben tener ningún efecto secundario sobre 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 flujos, cambie su estado interno ni participe en operaciones que consuman mucho tiempo.

Validación

Para validar esta función, ejecute los siguientes casos de prueba CTS y VTS de la cámara:

Módulos de cámara CTS:

Cámara VTS:

VtsHalCameraProviderV2_4TargetTest.cpp