CameraX 1.3 ya está en versión beta


CameraX, la biblioteca de cámaras de Android Jetpack que lo ayuda a crear una experiencia premium que funciona de manera consistente en todas las versiones y dispositivos de Android, se vuelve aún más útil con la versión 1.3. CameraX, que ya se usa en un número creciente de aplicaciones de Android, cubre una amplia gama de casos de uso, desde interacciones de cámara simples y potentes hasta procesamiento de imágenes avanzado y más.

CameraX 1.3 abre funciones aún más avanzadas. Con la función de cámara dual concurrente, las aplicaciones pueden servir a dos cámaras al mismo tiempo. Además, 1.3 facilita sorprender a los usuarios con nuevas capacidades de video HDR. Ahora también puede agregar transformaciones de la biblioteca de gráficos (por ejemplo, usando OpenGL o Vulkan) a los casos de uso de Vista previa, ImageCapture y VideoCapture para aplicar filtros y efectos. También hay muchas otras mejoras de video.

CameraX Versión 1.3 está oficialmente en la fase beta hoy¡así que entremos directamente en los detalles!

CameraX facilita el uso de funciones de cámara complejas, y la nueva función de cámara dual no es una excepción. CameraX se ocupa de los detalles de bajo nivel, p. B. para asegurarse de que las secuencias de cámara simultáneas se abren y cierran en el orden correcto. En CameraX, vincular dos cámaras simultáneas no es muy diferente a vincular una sola cámara.

Primero, verifique qué cámaras son compatibles con la conexión simultánea getAvailableConcurrentCameraInfos(). Un escenario común es elegir una cámara frontal y una trasera.

Por razones de compatibilidad, la cámara dual admite vincular simultáneamente cada cámara a dos o menos UseCases con una resolución máxima de 720p o 1440p, según el dispositivo.

Vídeo HDR

CameraX 1.3 también agrega soporte para transmisión de video de 10 bits y perfiles HDR, lo que le permite grabar videos con más detalles, color y contraste que antes. Puedes usar el... VideoCapture.Builder.setDynamicRange() Método para establecer una serie de configuraciones. Hay varios valores preconfigurados:

  • HLG_10_BIT - Un alto rango dinámico de 10 bits con codificación HLG.Esta es la codificación HDR recomendada, ya que todos los dispositivos que admiten captura HDR admiten HLG10. Consulte la guía Verifique la compatibilidad con HDR para obtener más información.
  • HDR10_10_BIT - Un alto rango dinámico de 10 bits con codificación HDR10.
  • HDR10_PLUS_10_BIT - Un alto rango dinámico de 10 bits con codificación HDR10+.
  • DOLBY_VISION_10_BIT - Un alto rango dinámico de 10 bits con codificación Dolby Vision.
  • DOLBY_VISION_8_BIT - Un alto rango dinámico de 8 bits con codificación Dolby Vision.

Primero, revisa los disponibles. información de la cámara para encontrar el primero que admita HDR. Aquí puede agregar criterios adicionales para la selección de la cámara.

var supportedHdrEncoding: DynamicRange? = null
val hdrCameraInfo = cameraProvider.availableCameraInfos
.first { cameraInfo ->
val videoCapabilities = Recorder.getVideoCapabilities(cameraInfo)
val supportedDynamicRanges =
videoCapabilities.getSupportedDynamicRanges()
supportedHdrEncoding = supportedDynamicRanges.firstOrNull {
it != DynamicRange.SDR

}
return@first supportedDynamicRanges != null
}

var cameraSelector = hdrCameraInfo?.cameraSelector ?:
CameraSelector.DEFAULT_BACK_CAMERA

Luego configura uno grabadora y un grabación de vídeo caso de uso si encontraste uno es compatible con la codificación Hdr antes, llame también establecerRangoDinámico() para habilitar HDR en la aplicación de su cámara.



val recorder = Recorder.Builder()
.setQualitySelector(QualitySelector.from(Quality.HIGHEST))
.build()
val videoCaptureBuilder = VideoCapture.Builder(recorder)

if (supportedHdrEncoding != null) {
videoCaptureBuilder.setDynamicRange(supportedHdrEncoding!!)
}
val videoCapture = videoCaptureBuilder.build()

Efectos

Si bien CameraX simplifica muchas tareas de la cámara, también proporciona ganchos para funciones avanzadas o personalizadas. Los nuevos métodos de efectos permiten aplicar transformaciones de la biblioteca de gráficos personalizados a los marcos para la vista previa, la captura de imágenes y la captura de video.

Puedes definir uno efecto de cámara para inyectar código en la canalización de CameraX y aplicar efectos visuales, como un efecto de retrato personalizado. Al crear su propia efecto de cámara A través del constructor, debe especificar a qué casos de uso apuntar (desde AVANCE, GRABACIÓN DE VÍDEOY CAPTURA DE IMAGEN). También debe especificar un Procesador de superficie para implementar un efecto GPU para la superficie subyacente. Se recomienda utilizar una API de gráficos como OpenGL o Vulkan para acceder a la interfaz. Este proceso bloquea el ejecutor asociado con ImageCapture. Se utiliza un subproceso de E/S interno de forma predeterminada, o puede especificar uno con ImageCapture.Builder.setIoExecutor(). Nota: Es responsabilidad de la implementación tener un buen desempeño. Con una entrada de 30 fps, cada fotograma debe procesarse en menos de 30 ms para evitar la pérdida de fotogramas.

hay una alternativa efecto de cámara Constructor para procesar imágenes fijas, ya que una mayor latencia es más aceptable cuando se procesa una sola imagen. Para este constructor, pase un procesador de imagenImplementar el método de proceso para devolver una imagen como se describe en ImageProcessor.Request.getInputImage() Método.

Una vez que haya definido uno o más efectos de cámara, puede agregarlos a su configuración de CameraX. Si usa un CameraProvider, debe llamar UseCaseGroup.Builder.addEffect() para cada efecto de cámaraentonces construye esto UseCaseGroupy entregarlo enlazar al ciclo de vida (). Si usas un controlador de cámaradeberías pasar todos nuestros CameraEffects establecerEfectos().

Funciones de vídeo adicionales

CameraX 1.3 tiene muchas funciones de video adicionales muy solicitadas que estamos felices de admitir.

Con VideoCapture.Builder.setMirrorMode()puede controlar cuándo las grabaciones de video se voltean horizontalmente. puedes contratar ESPEJO_MODO_DESACTIVADO (el estandar), MIRROR_MODE_ONY ESPEJO_MODE_ON_FRONT_ONLY (útil para hacer coincidir el estado del espejo del avanceque se refleja en las cámaras frontales). Nota: en una aplicación que solo usa la cámara frontal, MIRROR_MODE_ON Y ESPEJO_MODE_ON_FRONT_ONLY son equivalentes.

PendingRecording.asPersistentRecording() El método evita que un video sea detenido por eventos del ciclo de vida o la desvinculación explícita de un video. grabación de vídeo Caso de uso al que se conecta la grabadora de la grabación. Esto es útil si desea conectarse a otra cámara y continuar grabando video con esa cámara. Si esta opción está habilitada, debe llamar explícitamente Grabación.detener() o Grabación.close() para detener la grabación.

Para videos configurados para grabar audio a través de Grabación pendiente.conaudiohabilitado()Puedes llamar ahora Grabación.silencio() mientras la grabación está en progreso. Pase un valor booleano para indicar si silenciar o reactivar el audio y CameraX insertará silencio durante las partes silenciadas para garantizar que el audio coincida con el video.

Estadísticas de audio ahora tiene uno getAudioAmplitud() Método perfecto para dar a los usuarios una señal visual de que se está grabando el audio. Mientras se ejecuta una grabación de vídeo, respectivamente VideoRecordEvent se puede usar para acceder grabación de estadísticasque a su vez contiene el Estadísticas de audio Objeto.

Próximos pasos

Para obtener más detalles sobre las funciones descritas aquí y más, consulte las notas de la versión completa de CameraX 1.3. Cuando esté listo para probar CameraX 1.3, actualice la dependencia de CameraX de su proyecto a 1.3.0-beta01 (o la última versión en el momento de la lectura).

Si tiene comentarios sobre cualquiera de estas funciones o CameraX en general, cree un problema de CameraX. Como siempre, también puede comunicarse con nosotros a través de nuestro grupo de discusión CameraX.

Si quieres conocer otros artículos parecidos a CameraX 1.3 ya está en versión beta puedes visitar la categoría Android.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir