Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Configuraciones de transmisión

Android 10 presenta funciones que permiten a los clientes de cámaras 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 flujo de cámara único 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 características de combinación de flujos. Puede 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 clientes de cámaras. 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 la eficiencia, la potencia o los impactos en el rendimiento de elegir una transmisión sobre otra. Los clientes de cámaras pueden elegir libremente entre todas las configuraciones de transmisión posibles, pero en muchos casos, esto lleva a que los clientes utilicen aplicaciones y configuraciones de cámara subóptimas que realizan búsquedas exhaustivas que requieren 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 una pasada 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 las dimensiones particulares 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 la forma de [1 << PREVIEW | 1 << RECORD..] . Los casos de uso amplían la tupla normal (formato, ancho, alto, entrada) con una entrada adicional. Se prohíben los casos de uso público 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 es compatible con el dispositivo): 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 es compatible con el dispositivo): 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 la cámara a través de la API RecommendedStreamConfigurationMap .

Casos de uso obligatorios

Las configuraciones de transmisión recomendadas deben proporcionarse 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 YUV_420_888 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 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 BLOB + DATASPACE_JFIF (JPEG). Las configuraciones no deberían causar fallos 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 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 de la matriz de sensores.
ZSL (si es compatible) Si es compatible con el dispositivo de la cámara, 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 procesar 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 de CTS y VTS:

API para consultar combinaciones de transmisiones

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 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 función también permite a los clientes de la cámara recibir 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 garantizar 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 de HIDL adicional en la cámara HAL.

Implementación

Para admitir una API para consultar combinaciones de secuencias, la cámara HAL debe proporcionar una implementación para la interfaz API de isStreamCombinationSupported isStreamCombinationSupported. Esta interfaz comprueba si el dispositivo de 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 transmisiones 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 rutas 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 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 a la 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 transmisiones, 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:

VtsHalCameraProviderV2_4TargetTest.cpp