Android incluye 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 hace referencia a una sola transmisión de cámara configurada en el dispositivo de cámara, y una combinación de transmisiones hace referencia a uno o más conjuntos de transmisiones configuradas en el dispositivo de cámara. Para obtener más información sobre estas funciones, consulta las configuraciones de flujo recomendadas y la API para consultar combinaciones de funciones.
Implementación de referencia
Hay una implementación de referencia del proveedor de los flujos de configuración recomendados y la API para consultar las funciones de combinación de transmisión. Puedes encontrar esta implementación en QCamera3HWI.cpp.
Parámetros de configuración de transmisión recomendados
Los proveedores de cámaras pueden anunciar configuraciones de transmisión recomendadas para casos de uso específicos a los clientes de cámaras. Estas opciones de configuración 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 de configuración de transmisión a los clientes de la cámara, no proporciona información sobre los impactos de eficiencia, energía o 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 lleva a que los clientes usen configuraciones de cámara subóptimas y que las apps realicen búsquedas exhaustivas que consumen mucho tiempo.
Por ejemplo, aunque algunos formatos YUV procesados son obligatorios y deben ser compatibles, es posible que el dispositivo de cámara no tenga compatibilidad nativa con los formatos. Esto da como resultado un pase 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, por lo que determinadas dimensiones son preferidas en términos de potencia y rendimiento.
No es necesario que tus mapas de configuración de flujo recomendados sean exhaustivos en comparación con StreamConfigurationMap. Los mapas de configuración sugeridos deben cumplir con los requisitos de la sección implementación y pueden incluir cualquiera de los formatos, tamaños y otros valores disponibles que se encuentran en StreamConfigurationMap. Los formatos, los tamaños y otros valores ocultos que no se encuentran en StreamConfigurationMap no se pueden incluir en los mapas de configuración de transmisiones 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 transmisiones para casos de uso específicos. En la declaración, se usan mapas de bits que indican los casos de uso sugeridos en el formato[1 << PREVIEW | 1 << RECORD..]
. Los casos de uso extienden la tupla regular (formato, ancho, altura, entrada) con una entrada adicional. Se prohíben los casos de uso públicos inexistentes o cualquier otro bit establecido dentro del rango[PUBLIC_END, VENDOR_START]
.Esta información se almacena en la etiqueta de metadatos
availableRecommendedStreamConfigurations
.En el siguiente ejemplo, se muestra un array de 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 recomienda 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 para este dispositivo de cámara. Al igual que en 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 es compatible): Es la asignación de los formatos de imagen recomendados que se sugieren para este dispositivo de cámara para las 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 la cámara a través de la API de RecommendedStreamConfigurationMap.
Casos de uso obligatorios
Se deben proporcionar los parámetros de configuración de transmisión recomendados para los siguientes casos de uso y cumplir con los requisitos correspondientes:
Caso de uso | Requisito |
---|---|
PREVIEW |
Una vista previa solo debe incluir parámetros de configuración de transmisiones procesadas que no se detengan
con formatos de salida como YUV_420_888 y
IMPLEMENTATION_DEFINED . |
RECORD |
Un registro de video debe incluir configuraciones de transmisión que coincidan con los perfiles de contenido multimedia compatibles anunciados con el formato IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT |
Una instantánea de video debe incluir parámetros de configuración de transmisión que sean al menos tan grandes como las resoluciones máximas de RECORD y solo con la combinación de formato BLOB + DATASPACE_JFIF y espacio de datos (JPEG). Las configuraciones shouldn't cause preview glitches y deberían poder ejecutarse a 30 fps. |
SNAPSHOT |
Las opciones de configuración de flujo de instantáneas deben incluir, al menos, una con un tamaño cercano a android.sensor.info.activeArraySize con la combinación de formato BLOB + DATASPACE_JFIF y espacio de datos (JPEG). Teniendo en cuenta las restricciones de relación de aspecto, 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 del sensor. |
ZSL (si es compatible) |
Si el dispositivo de la cámara las admite, las configuraciones recomendadas de flujo de entrada solo deben promocionarse junto con otros formatos de salida procesados o detenidos. |
RAW (si es compatible) |
Si el dispositivo de la cámara lo admite, las configuraciones de transmisión sin procesar recomendadas solo deben incluir formatos de salida basados en RAW. |
Otros casos de uso
Puedes proporcionar flujos de configuración recomendados adicionales para casos de uso específicos de tu implementación.
Validación
Para probar la implementación de los flujos de configuración recomendados, ejecuta las siguientes pruebas de CTS y VTS:
API para consultar combinaciones de atributos
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 específica de funciones. Esta API es necesaria porque la API de camera2 modela diferentes funciones, como 4K, 60 fps, video HDR, UltraHDR, zoom ultraancho 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 detalles, consulta la sección Implementación.
Cuando se admite la API, la estabilización de vista previa debe ser ortogonal respecto de otras funciones. Esto significa que, para un dispositivo de cámara que admite la estabilización de vista previa, el valor de muestra de isStreamCombinationWithSettingsSupported
para una combinación determinada debe ser el mismo cuando la estabilización de 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 multimedia 15, la cámara trasera principal debe admitir la estabilización de vista previa con vista previa HLG10 de 10 bits para la vista previa de 1080p y 720p, y 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 que la API pueda consultar combinaciones de funciones, implementa la siguiente combinación de funciones de las APIs de consulta en la versión 3 de ICameraDevice
:
constructDefaultRequestSettings
: Crea la configuración predeterminada para un tipo deCaptureRequest
especificado. El HAL puede usar la implementación deICameraDeviceSession::constructDefaultRequestSettings
.isStreamCombinationWithSettingsSupported
: Comprueba la compatibilidad del dispositivo de una combinación de transmisión de cámara específica con parámetros de sesión y clavesCaptureRequest
adicionales. Debe mostrartrue
para las combinaciones compatibles yfalse
para las combinaciones de atributos no compatibles. La HAL puede usar la implementación deisStreamCombinationSupported
y agregar compatibilidad para verificar que la configuración deCaptureRequest
se pase ensessionParams
.getSessionCharacteristics
: Toma una combinación de transmisión compatible con parámetros de sesión y muestra las características específicas de la sesión.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: enumera todas las configuraciones de sesión de uso general. Estas configuraciones se verifican mediante pruebas de cumplimiento.
En el caso de las versiones anteriores a la 3 de la interfaz de ICameraDevice
, la HAL debe implementar el método isStreamCombinationSupported
.
Para obtener más información sobre las combinaciones de atributos que consulta la API, consulta la documentación sobre sessionConfigurationQueryVersion
en system/media/camera/docs/metadata_definitions.xml
.
Para ver 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 compatibles con el dispositivo:
CameraDevice.CameraDeviceSetup
: Representación limitada deCameraDevice
que se puede usar para consultar combinaciones de atributos sin requerir una instancia deCameraDevice
.getCameraDeviceSetup
: Adquiere un objetoCameraDeviceSetup
para un ID de cámara determinado siisCameraDeviceSetupSupported
muestratrue
.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: Admite consultas de combinación de componentes si este valor esVANILLA_ICE_CREAM
o superior.OutputConfiguration
: Es una clase que describe la salida de la cámara, que puede contener una superficie diferida para consultas de combinación de atributos 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 sesión, que se pueden usar para las consultas de combinación de atributos.
Validación
Para validar tu implementación de esta función, usa las siguientes pruebas de VTS, CTS e ITS de la cámara (verificador del CTS):
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ITS de la cámara