Source: https://developer.android.com/jetpack/androidx/releases/camera?hl=es
Timestamp: 2020-07-04 11:56:49+00:00

Document:
CameraX | Desarrolladores de Android | Android Developers
Se agregó CameraX a Android Jetpack para que puedas incluir fácilmente funciones de la cámara eb tu app. La biblioteca proporciona una serie de soluciones de compatibilidad y soluciones alternativas para ayudar a que la experiencia de los desarrolladores sea coherente en muchos dispositivos.
Para obtener información sobre cómo usar la biblioteca de CameraX en tu app o biblioteca, consulta Descripción general de CameraX.
A continuación, se incluye una lista de todos los artefactos del grupo androidx.camera, junto con sus versiones de actualización más recientes. Cuando los incluyas en tu código, declara la dependencia con el formato androidx.camera:<artifact>:<version>.
Se actualizó por última vez esta biblioteca el 15 de abril de 2020.
Cómo probar dispositivos
Se probó CameraX en muchos dispositivos de nuestro lab. Si quieres ver una lista de los dispositivos que se encuentran actualmente en el lab, consulta Dispositivos del laboratorio probados con CameraX.
Para agregar una dependencia en CameraX, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Camera-Camera2 y Camera-Core versión 1.0.0
Nota: Las bibliotecas de AndroidX de versiones más nuevas ahora reflejan correctamente las dependencias implementation en comparación con api. Si tu proyecto se basa en una dependencia implícita expuesta a través de la dependencia implementation en la versión 1.0.0, será necesario que dependas explícitamente de esa dependencia en tu build.gradle.
Camera-Camera2 versión 1.0.0-beta03
Lanzamiento de androidx.camera:camera-camera2:1.0.0-beta03. La versión 1.0.0-beta03 contiene estas confirmaciones.
Se realizaron correcciones para admitir el lanzamiento de camera-core.
Camera-Core versión 1.0.0-beta03
Lanzamiento de androidx.camera:camera-core:1.0.0-beta03. La versión 1.0.0-beta03 contiene estas confirmaciones.
Se corrigió la regresión de beta03 por la que, cuando se llamaba a bindToLifecycle() sin un solo UseCase, se generaba una excepción. Esto evitó que se recuperara una instancia de Camera sin vincular un UseCase.
Camera-Camera2 versión 1.0.0-beta02
Lanzamiento de androidx.camera:camera-camera2:1.0.0-beta02. La versión 1.0.0-beta02 contiene estas confirmaciones.
Se corrigió el valor de ImageInfo.getRotationDegrees() de ImageProxy producido por ImageCapture a fin de que coincida con el valor de rotación de la orientación de EXIF (Id4281, b/150802561).
Ya no se requiere el orden explícito de las dependencias de CameraX en build.gradle para usar la implementación de CameraX/Camera2 predeterminada. En los casos en los que se requiera declarar dependencias estrictas, ahora se podrán incluir todas las dependencias de CameraX en el archivo de compilación (I46e88).
Se solucionó el problema relacionado con IllegalArgumentException que se producía en los dispositivos en los que el tamaño de la pantalla es inferior a 640 x 480 (Ife3f2, b/150506192).
Se corrigió bindToLifecycle para que solo modifique el UseCase si se vincula correctamente. Antes, cuando se llamaba a bindToLifecycle para realizar cálculos de resolución, se actualizaba el UseCase. Ahora ya no es necesario actualizar el UseCase para realizar los cálculos (I78d9e).
Camera-Core versión 1.0.0-beta02
Lanzamiento de androidx.camera:camera-core:1.0.0-beta02. La versión 1.0.0-beta02 contiene estas confirmaciones.
Se solucionó un problema por el que la sesión de captura del caso práctico de Preview no se actualizaba cuando la superficie de vista previa cambiaba después de que se llamaba a Preview.setSurfaceProvider() más de una vez.
Camera-Camera2 versión 1.0.0-beta01
Lanzamiento de androidx.camera:camera-camera2:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.
Se cambió el nombre de SurfaceRequest.setSurface(Surface) por SurfaceRequest.provideSurface(Surface) y el de SurfaceRequest.setWillNotComplete() por SurfaceRequest.willNotProvideSurface() (I224fe).
Se solucionó un problema por el que la relación de aspecto de una imagen guardada no era correcta después de cambiar el valor de rotación de destino usando ImageCapture.setTargetRotation() (I474ea, b/148763432).
Se corrigió la inicialización de las variantes de apps con ProGuard habilitado conservando la marca que establece el proveedor CameraXConfig predeterminado (I2d6c1).
Camera-Core versión 1.0.0-beta01
Lanzamiento de androidx.camera:camera-core:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.
Se reemplazó el elemento ListenableFuture de SurfaceRequest.provideSurface() por un Executor y una Callback. Esto simplifica la API porque no se requiere el manejo de excepciones en provideSurface() y no se pueda cancelar la devolución de llamada a provideSurface(). De esta forma, se evitan fallas en dispositivos más antiguos causadas por el lanzamiento de superficies de forma anticipada. Ahora se usa el objeto SurfaceRequest.Result para realizar un seguimiento de cómo una SurfaceRequest utiliza la Surface proporcionada (I7854b).
Se actualizó la documentación de las API del modo de flash para incluir valores posibles (I4a3ec).
Camera-Camera2 versión 1.0.0-alpha10
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.
Se mejoró la estabilidad de los dispositivos INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY. Para ello, se garantizó que los elementos de Surface solo se retengan durante el uso de Camera2 (I9dac2).
Se ajustó correctamente CONTROL_AE_TARGET_FPS_RANGE a fin de corregir el problema relacionado con la vista previa subexpuesta en dispositivos HEREDADOS (1224638).
Camera-Core versión 1.0.0-alpha10
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.
Se actualizó ImageCapture para permitir que se guarden imágenes en Uri y OutputStream. Se combinaron los métodos takePicture sobrecargados en uno solo. Se actualizó la app de prueba para usar Uri como ejemplo canónico (Ia3bec).
El nombre de Preview.PreviewSurfaceProvider cambió por Preview.SurfaceProvider. Los SurfaceProvider ya no requieren que los desarrolladores creen su propio ListenableFuture y ahora se proporciona la Surface a través de un objeto SurfaceRequest nuevo. Se quitó el método Preview.getPreviewSurfaceProvider() debido a su potencial de uso inadecuado cuando Preview se sincroniza con otras clases, como PreviewView (I20105).
Se agregaron getTargetRotation() y getTargetName() a Preview (Iceee7).
Se agregaron getTargetRotation(), getBackpressureStrategy() y getImageQueueDepth() en ImageAnalysis (I9d6d9).
Se agregaron getTargetRotation() y getCaptureMode() en ImageCapture() (I5bc17).
Los argumentos que antes se pasaban en ImageCapture.OnImageSavedCallback.onError() y ImageCapture.OnImageCapturedCallback.onError() ahora se reemplazaron por un solo argumento ImageCaptureException, que aún contiene toda la información que se pasó anteriormente.
Se quitó el argumento del archivo que antes se pasaba en ImageCapture.OnImageSavedCallback.onImageSaved() (I750d2).
Ahora se marcan las clases Preview y ImageCapture como finales (I2500b).
Se actualizó la API y se combinaron los métodos getZoomRatio(), getMaxZoomRatio(), getMinZoomRatio() y getLinearZoom() de CameraInfo en getZoomState(), que muestra una instancia de ZoomState (Ib19fe).
Se quitaron los campos de API OPTION_TARGET_CLASS y OPTION_TARGET_NAME de CameraXConfig, ya que están destinados solo para uso interno de bibliotecas. Se quitó el constructor de CameraXConfig.Builder (I96912).
Se quitó el requisito por el que la app debía extender Application a fin de inicializar CameraX. Ahora, se inicializará CameraX con una configuración predeterminada de Camera2, siempre que se incluya el artefacto camera-camera2 en el objeto build.gradle de la aplicación (I58ff5) (b/146923574).
Camera-Camera2 versión 1.0.0-alpha09
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.
Agrega la ruta de acceso de interoperabilidad de camera2 para extraer un ID de cámara Camera2. Puedes extraer el ID de la cámara de CameraInfo usando Camera2CameraInfo.extractCameraId(). En la siguiente muestra de código, se explica cómo usarlo:
La clase Camera2CameraInfo requiere la markerClass ExperimentalCamera2Interop.
Camera-Core versión 1.0.0-alpha09
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.
Se cambió el nombre del parámetro useCaseForSurface de SurfaceOrientedMeteringPointFactory por useCaseForAspectRatio y se amplió la documentación de referencia.
Los constructores FocusMeteringAction.Builder() reemplazan a los métodos FocusMeteringAction.Builder.from().
Se quitó DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float). Las aplicaciones deben usar el constructor que toma un parámetro Display y pasar la pantalla actual.
Se implementaron mejoras en Javadoc para las API de enfoque y medición en relación con las marcas MeteringMode y 3A, y el uso del parámetro Display.
Se amplió la documentación de referencia para setZoomRatio y setLinearZoom.
Se solucionaron problemas que ocurrían al cerrar y, luego, abrir cámaras, lo que provocaba un error de comprobación de "condición previa".
Se corrigió un ConcurrentModificationException que se producía al usar las API de linterna y zoom.
Se solucionó un problema para poder seleccionar resoluciones más cercanas a las solicitadas cuando está disponible un tamaño de dimensiones mod16.
Las API de startFocusMetering y cancelFocusMetering ahora se comportan como se indica: con los tiempos correctos y mostrando, posiblemente, errores cuando se producen.
Se solucionó un problema por el que se solicitaba una resolución de objetivo determinada con una relación de aspecto de recorte en un dispositivo que no admite esos tamaños. Ahora, se selecciona un tamaño no recortado de resolución suficiente que se adecúe a la solicitud original cuando está disponible.
Camera-Camera2 versión 1.0.0-alpha08
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.
No todas las opciones para la solicitud de captura de Camera2 funcionan cuando se usa la interoperabilidad de Camera2. Si no se admite la opción solicitada, no se inicia la sesión y se produce un error como este: 09-09 14:04:13.643 10117 26020 26036 E AndroidRuntime: java.lang.IllegalArgumentException: Unsupported session configuration combination.
Se solucionó un problema por el que se mostraba una pantalla negra como vista previa después de rotar o cambiar la cámara para las API nivel 21 y 22.
Experimental: Se agregó una ruta de acceso de interoperabilidad de camera2 para extraer el ID de la cámara.
Camera-Core versión 1.0.0-alpha08
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.
Las apps que usan PreviewView o CameraView pueden tener una vista previa de relación de aspecto incorrecta. Esto ocurre después de pausar o reanudar contenido en algunos dispositivos FULL, como el Pixel 2.
Se actualizó la documentación de FocusMeteringAction y CameraControl.
Se implementó TorchControl para enableTorch() y getTorchState().
Se ocultó IntDefs y se quitaron las constantes de IntDef de su definición.
Se movió rotationDegrees de la clase OnImageCaptureCallback a ImageInfo.
Se movió rotationDegrees de la clase Analyzer a ImageInfo.
Camera-Camera2 versión 1.0.0-alpha07
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha07. La versión 1.0.0-alpha07 de camera-camera2 contiene estas confirmaciones.
Ahora se puede usar Camera2Config con la inicialización y configuración de una implementación basada en Camera2 para CameraX. Obtén más información sobre cómo usarla durante la inicialización en la sección de camera-core de las notas de la versión.
La funcionalidad de interoperabilidad de camera2 ahora está marcada como experimental y se movió a un paquete separado: androidx.camera.camera2.interop..
Camera-Core versión 1.0.0-alpha07
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha07. La versión 1.0.0-alpha07 de camera-core contiene estas confirmaciones.
Ten en cuenta que existen algunos cambios importantes en esta versión Alfa mientras preparamos la versión Beta. Te recomendamos que revises los cambios y compartas tus comentarios con el grupo de Google de CameraX. A los desarrolladores que usan CameraX en apps de Play Store, les recomendamos esperar la versión Beta oficial antes de actualizar la biblioteca de sus aplicaciones.
Importante: Cambió la inicialización de CameraX. Las aplicaciones deben implementar CameraXConfig.Provider y usar el objeto Camera2Config predeterminado que proporciona androidx.camera.camera2. El siguiente es un ejemplo de uso típico:
Se quitó la clase de CameraX. Los elementos bindToLifecycle(), unbind(), unbindAll(), isBound() y hasCamera() que antes proporcionaba la llamada a la clase de CameraX ahora están disponibles a través de ProcessCameraProvider.
Se obtiene una instancia por proceso de ProcessCameraProvider de manera asíncrona con el método estático ProcessCameraProvider.getInstance(), que muestra un objeto de escucha futuro, que proporciona el ProcessCameraProvider cuando se completa el proceso. Aquí se muestra un uso típico en onCreate(). Puedes realizar llamadas a getInstance() más tarde en el ciclo de vida de la actividad para posponer la latencia de inicialización (por ejemplo, cuando una acción del usuario abre una IU de la cámara).
Se puede agregar un objeto de escucha al ListenableFuture que muestra getInstance(). De este modo, se garantiza que se pueda recuperar el proveedor de la cámara del Future sin bloquear Future.get().
Ahora se selecciona la cámara mediante un selector de cámara, en lugar de variar según el caso práctico.
CameraProvider.bindToLifecycle recibe el propietario del ciclo de vida, el selector de cámara y los casos prácticos, que luego se vinculan al propietario determinado y se ejecutan para la cámara seleccionada.
Se quitaron las clases "Config" de caso práctico. En su lugar, se compilan casos prácticos directamente, y se configuran opciones en cada compilador. Por ejemplo:
Se actualizó el caso práctico de la vista previa para aceptar una superficie creada y administrada por la aplicación a fin de garantizar que se cumplan las prácticas recomendadas de Android. Te recomendamos usar la clase de vista PreviewView que se proporciona en el paquete de Camera-View.
Consulta la documentación sobre cómo adjuntar una superficie administrada por la app. En esos casos, la app administra el ciclo de vida de la superficie.
Importante: La implementación del método analizador ImageAnalysis debe llamar a image.close() en las imágenes recibidas cuando se terminan de usar. De lo contrario, es posible que no se reciban imágenes nuevas o que demore en responder la cámara, según la configuración de contrapresión. Consulta los documentos de referencia para obtener más información.
Se cambió ImageAnalysis ImageReaderMode a una estrategia de contrapresión intdef.
Se marcó ImageProxy.getImage() como experimental. Las aplicaciones deben anotar el uso, por ejemplo, mediante @androidx.camera.core.ExperimentalGetImage.
Se quitó el requisito de anotación UIThread para el Analyzer.
Se agregó la función ImageAnalysis.clearAnalyzer() para quitar un analizador.
Se cambió el nombre de los objetos de escucha con más de 1 método por "Callback":
ImageCapture.OnImageCapturedListener ahora es ImageCapture.OnImageCapturedCallback.
ImageCapture.OnImageSavedListener ahora es ImageCapture.OnImageSavedCallback.
VideoCapture.OnVideoSavedListener ahora es VideoCapture.OnVideoSavedCallback.
Las Enumeraciones cambiaron a IntDef.
Se agregaron los siguientes controles de zoom:
Se agregó CameraInfo.hasFlashUnit() para determinar si el hardware de flash/linterna está presente.
Se quitó CameraInfo.isFlashAvailable(). La linterna anula la funcionalidad del flash. Consulta más detalles en la documentación de referencia.
Se reemplazaron los campos ImageCapture.Metadata por los métodos de acceso get/set/is.
Ahora, startFocusMetering y cancelFocusMetering muestran ListenableFutures, que representan la operación asíncrona de la llamada.
Los elementos MeteringPoints ahora funcionan como controladores para las acciones de medición, y los producen las fábricas. Las apps deben usar las fábricas existentes en lugar de las personalizadas.
Se solucionó un problema relacionado con la captura de fotos durante una reanudación (luego de una pausa anterior en la que se tomaron fotos antes de que se completara la acción).
Error conocido: CameraControl.enableTorch() funciona, pero el objeto ListenableFuture<Void> que se muestra siempre es un elemento complete(success) futuro inmediato, aunque no haya unidades de flash. Este problema se solucionará en las versiones futuras hasta alcanzar el comportamiento final: cuando no haya unidades de flash, enableTorch(true) fallará inmediatamente (no enviará la solicitud a CaptureSession) y TorchState permanecerá desactivado.
Error conocido: startFocusAndMetering y cancelFocusAndMetering inician y cancelan la medición de foco, pero muestran un elemento completed (success) futuro inmediato que no representa el comportamiento indicado. El objeto FocusMeteringResult de ListenableFuture<FocusMeteringResult> CameraControl.startFocusAndMetering() es un resultado falso que muestra isFocusSuccessful() y siempre es "falso", lo que difiere del comportamiento previsto y documentado.
Error conocido: Se está desarrollando una fábrica de puntos de medición para usarla con eventos táctiles de PreviewView. Por el momento, las apps que conectan superficies administradas y personalizadas pueden usar las fábricas de puntos de medición existentes. De lo contrario, no hay funciones de enfoque táctil disponibles para PreviewView.
Camera-Camera2 y Camera-Core versión 1.0.0-alpha06
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha06 y androidx.camera:camera-core:1.0.0-alpha06. Estas son las confirmaciones incluidas en camera-camera2:1.0.0-alpha06, y estas las incluidas en camera-core:1.0.0-alpha06.
Cambios en la configuración de las relaciones de aspecto:
Se agregó setTargetAspectRatioMode(), y acepta un argumento de enumeración. Esto establece el modo de relación de aspecto con las opciones RATIO_4_3 o RATIO_16_9, en lugar de una arbitraria. Este acercamiento refleja el hecho de que solo se proporcionan ciertas relaciones de aspecto de la cámara, en lugar de cualquier relación arbitraria.
Actualmente, las únicas relaciones disponibles son 16:9 y 4:3. En el caso de 1:1, solo ciertos dispositivos la tienen disponible desde la cámara, y también solo en resoluciones limitadas. Las aplicaciones que diseñan una interfaz o procesamiento 1:1 deben usar las opciones 16:9 o 4:3 más flexibles, así como recortar la pantalla o procesar una subregión.
Estas relaciones de aspecto están orientadas para usar el área máxima del sensor.
Se agregó getTargetAspectRatio() a las API de configuración de casos prácticos y muestra la relación de aspecto a la que se orienta el resultado del caso.
Se modificó el método setTargetAspectRatio(Rational aspectRatio) por setTargetAspectRatioCustom(Rational aspectRatio) para ImageCapture. Cuando se establece el resultado de ImageCapture, este se recorta según corresponda.
API de ejecutor
Las siguientes funciones aceptan un parámetro ejecutor, que permite a la app controlar en qué ejecutor se ejecuta la función.
API de Preview.setOnPreviewOutputUpdateListener(). Si no está presente el ejecutor para esa función, entonces se ejecuta en el subproceso principal.
Se agregó CameraInfo con API de Check Flash Available y Sensor Rotation.
Se agregó CameraInfo y un método getCameraInfo, que permite a las apps verificar si está disponible una lente que apunte a CameraInfo y si hay flash disponible en esa cámara. Por ejemplo:
Se agregó CameraInfo.getSensorRotationDegrees(). Proporciona la orientación del sensor de la cámara en relación con la orientación natural del dispositivo, o por conveniencia, en relación con una orientación descrita por una rotación de superficie (que describe una orientación relativa a la orientación natural).
Cambios de API y correcciones de errores
Relaciones de aspecto: Para cada caso práctico, las aplicaciones deben llamar a una de estas dos opciones: setTargetResolution() o setTargetAspectRatio(). Si se llama a ambos en el mismo compilador, se muestra un error.
Por lo general, se recomienda usar setTargetAspectRatio() según el diseño de la IU de la aplicación. Las resoluciones específicas se basan en el caso práctico. Por ejemplo, la vista previa está cerca de las resoluciones de pantalla y la captura de imágenes proporciona imágenes fijas de alta resolución. Para obtener más información, consulta la tabla de resoluciones automáticas.
Usa setTargetResolution() para casos más específicos, como cuando se requieren resoluciones mínimas (para guardar cálculos) o máximas (para detalles de procesamiento).
API de ejecutor: Se quitó la llamada a setCallbackHandler() de las API de configuración de casos prácticos. En cambio, las aplicaciones pueden establecer el ejecutor como un parámetro en varias otras API que establezcan una devolución de llamada.
Se actualizaron las anotaciones nulas de varias funciones.
Se corrigió un problema que causaba que se arrojara java.lang.IllegalStateException at Camera$StateCallback.onError al abrir la cámara.
Se solucionó el problema en el que se seleccionaban resoluciones que eran demasiado pequeñas (menos de 640 x 480) cuando la app solicitaba resoluciones más grandes o predeterminadas que generaban una imagen de vista previa bloqueada o borrosa. Las aplicaciones que necesitan específicamente resoluciones más pequeñas pueden solicitarlas de forma explícita.
Se solucionó un problema por el cual la cámara mostraba una pantalla negra (no se podía iniciar) después de regresar de un intent que lanzaba otra aplicación de cámara.
Se corrigió un error que arrojaba java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface! cuando se iniciaban o detenían repetidamente algunas apps.
Se corrigió el error java.lang.IllegalStateException: maxImages (4) has already been acquired, call #close before acquiring more. que se generaba al inhabilitar ImageAnalysis.
Se agregaron pruebas adicionales para el flujo de desconexión de la cámara.
Se mejoró la robustez del sistema de pruebas cuando se ejecutan pruebas de cámara consecutivas.
Camera-Camera2 y Camera-Core versión 1.0.0-alpha05
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha05 y androidx.camera:camera-core:1.0.0-alpha05. Estas son las confirmaciones incluidas en camera-camera2:1.0.0-alpha05 y camera-core:1.0.0-alpha05.
Cambio de API: variables de error en casos prácticos con cambios de nombre:
Se cambió el nombre de ImageCapture.UseCaseError por ImageCapture.ImageCaptureError.
Se cambió el nombre de VideoCapture.UseCaseError por VideoCapture.VideoCaptureError.
Se agregó la API de CameraControl con la de Tap-to-Focus
Se agregó una API a fin de obtener un objeto CameraControl de CameraX para una cámara, seleccionado por lentes frontales:
Se agregaron MeteringPointFactory, MeteringPoint, MeteringMode y FocusMeteringAction para ejecutar Tap-to-Focus:
Se agregó una API para CameraControl a fin de iniciar y cancelar la medición de foco:
Se agregaron API para las fábricas de puntos de medición que ayudan a traducir las coordenadas de presión a las coordenadas del sensor, en función de clases de visualización:
Se fuerza la llamada a los siguientes métodos del subproceso principal (de IU), lo que arroja un IllegalStateException cuando no están presentes. Las versiones futuras permitirán el uso en otros subprocesos y garantizarán la serialización.
Ahora, varios ajustes de configuración aceptan parámetros nulos y los métodos set correspondientes pueden mostrar un valor nulo.
Se solucionó el problema que se generaba cuando se probaban emuladores que no eran compatibles con la configuración de AF/AE/AWB.
Se corrigió un error de bloqueo en la rotación mientras se analizaba la imagen.
Se corrigió un error en el que la vista previa se veía negra al inicio (sin datos de la cámara), después de la rotación o al alternar entre las cámaras frontal y posterior.
Se quitaron las pruebas de varios casos prácticos de análisis simultáneos de imágenes. Para garantizar la compatibilidad, las aplicaciones solo deben adjuntar un único caso práctico de análisis de imágenes.
Se agregaron pruebas roboeléctricas iniciales para cámaras falsas en el conjunto de pruebas de cámara (WIP).
Se quitó la prueba Camera2Inititalizer, ya que su cobertura era confusa o engañosa.
Camera-Camera2 y Camera-Core versión 1.0.0-alpha04
Lanzamiento de androidx.camera:camera-camera2:1.0.0-alpha04 y androidx.camera:camera-core:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Cambios en la selección de relación de aspecto y resolución
El objetivo de CameraX es inicializar con éxito una sesión de la cámara. Esto significa que CameraX compromete las relaciones de resolución/aspecto en función de la capacidad del dispositivo, a fin de iniciar una sesión de captura como su primer objetivo, por lo que es posible que no se cumplan las solicitudes exactas. Esto puede deberse a lo siguiente:
Dispositivos que no admiten la resolución solicitada
Problemas de compatibilidad, como en dispositivos HEREDADOS donde se deben usar ciertas resoluciones para que funcionen correctamente
En algunos dispositivos, ciertos formatos solo están disponibles en algunas relaciones de aspecto
Preferencia por un "mod16 más cercano" para JPEG o codificación de video Consulta CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP.
Se realizaron algunos cambios para establecer resoluciones y relaciones de aspecto, con el objetivo de que la API sea más clara:
Ahora se considera que el caso práctico de vista previa tiene una relación de aspecto predeterminada de 4:3 cuando no se establece ninguna.
Cuando CameraX considera internamente los cambios en las resoluciones solicitadas y las relaciones de aspecto en función de la capacidad del dispositivo, primero intenta mantener la misma relación de aspecto (según lo determinado por cualquiera de las llamadas de setTargetAspectRatioo setTargetResolution).
Una versión de "resolución 16 más cercana" de la resolución se considera como la misma relación de aspecto.
Modo ImageAnalysis sin bloqueo
El comportamiento de ImageReaderMode.ACQUIRE_LATEST_IMAGE ahora no incluye bloqueos. Adquiere la última imagen en la cola, pero descarta continuamente las imágenes no utilizadas para permitir que la canalización de la cámara evite el bloqueo.
El analizador puede contener una sola imagen de manera indefinida sin detener la canalización.
Si la aplicación proporciona un ejecutor que luego bloquea, se bloquea el caso práctico de ImageAnalysis.
El ejecutor predeterminado establecido internamente se comporta como un ejecutor sin bloqueo.
Se corrigieron los problemas relacionados con el tiempo de espera de convergencia de 3A cuando se capturan imágenes en dispositivos sin enfoque, exposición ni balance de blancos automático.
Se solucionó el problema que se producía cuando se tomaban fotos rápidamente con ImageCapture. Se corrigió el error java.lang.IllegalStateException: maxImages (2) has already been acquired.
Se solucionó el problema que se producía cuando no se llamaba a setLensFacing para un caso práctico, lo que generaba java.lang.IllegalArgumentException: Unable to get camera ID for use case.
Se solucionó el problema por el que el dispositivo HEREDADO requería una relación de aspecto específica como resolución JPEG máxima.
Se solucionó un problema que se producía al colocar en segundo plano la app mientras se abría la cámara.
Se solucionó el problema en la API de niveles inferiores a 25, lo que quitó el error checkAndUpdateEglState: invalid current EGLDisplay.
Se solucionó el problema relacionado con la desvinculación de la vista previa después de habilitar e iniciar extensiones.
Los artefactos de compilación para la vista y las extensiones de la cámara ahora se publican como versiones Alfa.
Camera-Camera2 y Camera-Core versión 1.0.0-alpha03
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha03 y androidx.camera:camera-camera2:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Se agregó una aclaración de javadoc para "target" en las llamadas de configuración de setTarget.
Se corrigió la falla en la superficie de entrada/salida no configurada para apertura/cierre o vinculación/desvinculación rápidos.
Cambio a nuevas implementaciones de Futures.
Se corrigieron pruebas para que sean más sólidas.
La prueba de integración principal ahora muestra el tiempo de captura de fotos.
Se desarrolló la clase de compatibilidad interna para ejecutores.
Las capturas de la app de prueba de sincronización esperan a que se completen las anteriores para mejorar la estabilidad.
Se agregaron verificaciones de control de versiones.
Cobertura de prueba adicional: devoluciones de llamadas de eventos de extensión.
Mejoras para imágenes y metadatos internamente correspondientes.
Se implementaron correcciones en el cambio de modo en la app de prueba.
Camera-Camera2 y Camera-Core versión 1.0.0-alpha02
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha02 y androidx.camera:camera-camera2:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Se solucionó el problema relacionado con la división por cero cuando se usa el emulador.
Se corrigió el error NullPointerException/Surface Abandoned que se producía en algunos dispositivos cuando se tomaban fotos rápidamente mientras se desvinculaban y volvían a vincular con rapidez los casos prácticos.
Se corrigió un problema interno para garantizar que las actualizaciones de la solicitud de captura afecten a todas las superficies de manera coherente.
Se implementaron mejoras de estabilidad al reiniciar casos prácticos en nuevas instancias de apps.
Se hicieron cambios en la arquitectura interna con el objetivo de prepararla para ejecutores de compatibilidad en la API.
Se hicieron aclaraciones adicionales de Javadoc sobre la clase CameraX y la administración del ciclo de vida.
Se agregaron pruebas instrumentadas para la aplicación de prueba de rendimiento Antelope.
Se quitó la necesidad de "-keepattributes Signature" en la configuración de ProGuard de la app.
Camera-Camera2 y Camera-Core 1.0.0-alpha01
Lanzamiento de androidx.camera:camera-core:1.0.0-alpha01 y androidx.camera:camera-camera2:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.
Camera-Lifecycle versión 1.0.0
Camera-Lifecycle versión 1.0.0-beta03
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-beta03. La versión 1.0.0-beta03 contiene estas confirmaciones.
Camera-Lifecycle versión 1.0.0-beta01
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.
Se corrigió la documentación para indicar que, cuando se obtiene un objeto ProcessCameraProvider durante la inicialización, se usa una configuración predeterminada y que la extensión Application es opcional (I5e395).
Camera-Lifecycle versión 1.0.0-beta02
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-beta02. La versión 1.0.0-beta02 contiene estas confirmaciones.
Se realizó una actualización para admitir las correcciones de errores en los artefactos camera-camera2:1.0.0-beta02 y camera-core:1.0.0-beta02.
Camera-Lifecycle versión 1.0.0-alpha10
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.
Se agregó la anotación @MainThread a los métodos BindToLifecycle, unbind y unbindAll (I990d2).
Camera-Lifecycle versión 1.0.0-alpha03
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Se implementaron varias correcciones y actualizaciones para admitir los cambios de Camera Core y Camera2.
Camera-Lifecycle versión 1.0.0-alpha02
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Se actualizó para poder usar androidx.camera:camera-core:1.0.0-alpha08.
Camera-Lifecycle versión 1.0.0-alpha01
Lanzamiento de androidx.camera:camera-lifecycle:1.0.0-alpha01. La versión 1.0.0-alpha01 de camera-lifecycle contiene estas confirmaciones.
Notas sobre la API
Se agrega el artefacto de camera-lifecycle, que proporciona una interfaz LifeCycleCameraProvider y una implementación llamada ProcessCameraProvider, la que proporciona muchas de las funciones de la clase CameraX anterior en Core y se obtiene mediante un método getInstance().
Las apps deben incluir la biblioteca de camera-lifecycle para usar CameraX.
Consulta las notas en la sección camera-core sobre cómo realizar la inicialización de CameraX con un elemento ProcessCameraProvider.
Camera-Extensions y Camera-View versión 1.0.0
Camera-Extensions versión 1.0.0-alpha10
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.
Se realizaron correcciones para admitir el lanzamiento de Camera-Core
Camera-View versión 1.0.0-alpha10
Lanzamiento de androidx.camera:camera-view:1.0.0-alpha010. La versión 1.0.0-alpha010 contiene estas confirmaciones.
Se solucionó un problema conocido anterior por el que la implementación de SurfaceView de PreviewView no funcionaba correctamente en algunos dispositivos y hacía que la aplicación fallara después de reanudar la vista previa (I5ed6b).
Camera-Extensions versión 1.0.0-alpha09
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.
Se realizó una actualización para admitir correcciones de errores en los artefactos camera-camera2:1.0.0-beta02, camera-core:1.0.0-beta02 y camera-lifecycle:1.0.0-beta02.
Camera-View versión 1.0.0-alpha04
1 de abril de 2020 Lanzamiento de androidx.camera:camera-view:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.
Es posible que el uso de ImplementationMode.SURFACE_VIEW con PreviewView no funcione bien en algunos dispositivos, ya que la SurfaceView que se usa para la vista previa invalida su superficie cuando se detiene el ciclo de vida de la ventana en la que se encuentra. Cuando se reinicia, la cámara se vuelve a abrir y puede intentar reanudar la vista previa antes de que la superficie de SurfaceView vuelva a ser válida. Por ahora, debes usar ImplementationMode.TEXTURE_VIEW.
Se cambió el nombre de PreviewView.setImplementationMode() por PreviewView.setPreferredImplementationMode().
Se cambió el nombre de PreviewView.getImplementationMode() por PreviewView.getPreferredImplementationMode().
Se reemplazó PreviewView.getSurfaceProvider() por PreviewView.createSurfaceProvider(CameraInfo), que toma una instancia de CameraInfo anulable que se usa para optimizar la vista previa mediante ImplementationMode.SURFACE_VIEW siempre que sea posible. Si se pasa una instancia nula o si configuras el modo de implementación preferido como ImplementationMode.TEXTURE_VIEW, se usa internamente ImplementationMode.TEXTURE_VIEW.
En la siguiente muestra de código, se indica cómo se usaban antes los casos prácticos de vista previa con PreviewView.
Ahora, puedes escribir lo siguiente:
Se agregó la anotación @UiThread a PreviewView.getSurfaceProvider(), lo que significa que se debe invocar desde el subproceso principal (I192f3).
Se agregó PreviewView.setScaleType(), lo que permite establecer el tipo de escala de la vista previa. Acepta uno de los valores de PreviewView.ScaleType y el valor predeterminado es PreviewView.ScaleType.FILL_CENTER.
Se agregó PreviewView.getScaleType().
Se quitó la compatibilidad con la configuración del modo de implementación de PreviewView en un diseño XML con el atributo implementationMode.
Se agregó la API de createMeteringPointFactory() a PreviewView para admitir la conversión (x, y) en PreviewView a MeteringPoint (Ib36d7).
Se corrigieron casos en los que se mostraba una vista previa incorrecta después de que se cambiaba el tamaño de PreviewView (I71101).
Camera-Extensions versión 1.0.0-alpha08
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.
Lanzamiento de androidx.camera:camera-view:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.
Camera-Extensions versión 1.0.0-alpha07
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.
Lanzamiento de androidx.camera:camera-view:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.
La implementación TextureView de PreviewView ahora establece el tamaño de TextureView como el tamaño de salida del sensor de la cámara antes de escalarlo para llenar su PreviewView superior. Si quieres que la vista previa de la cámara llene toda una parte de la IU (por ejemplo, toda la pantalla), no debes establecer el tamaño de la PreviewView como un valor fijo ni unir su contenido (por ejemplo, usando el atributo "wrap_content"), ya que esto puede hacer que la vista previa de la cámara solo llene parte de la PreviewView (si el tamaño de salida del sensor de la cámara es menor). En cambio, debes configurar la PreviewView de modo que sea tan grande como el elemento superior (por ejemplo, mediante el atributo "match_parent") (1204869).
Camera-Extensions versión 1.0.0-alpha06
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Camera-View versión 1.0.0-alpha06
Lanzamiento de androidx.camera:camera-view:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Camera-Extensions versión 1.0.0-alpha05
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Se actualizó para que coincida con las API internas de Camera Core.
Camera-View versión 1.0.0-alpha05
Lanzamiento de androidx.camera:camera-view:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Es posible que la relación de aspecto sea incorrecta al usar PreviewView. (b/146215202)
Se implementó una nueva clase llamada PreviewView.TextureViewImplementation que sincroniza el ciclo de vida de SurfaceTexture con el uso que hace la cámara de la superficie de TextureView.
Camera-Extensions versión 1.0.0-alpha04
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha04. La versión 1.0.0-alpha04 de camera-extensions contiene estas confirmaciones.
Ahora, la verificación de la disponibilidad y habilitación de una extensión toma un objeto CameraSelector como parámetro de entrada. Este debe ser el mismo elemento CameraSelector que se usa para vincular el caso práctico.
Antes de usar la biblioteca de extensiones, debes inicializar las extensiones.
Lanzamiento de androidx.camera:camera-view:1.0.0-alpha04. La versión 1.0.0-alpha04 de la camera-view contiene estas confirmaciones.
Se proporciona una clase PreviewView para mostrar fácilmente el resultado del caso práctico de vista previa en una aplicación.
Se puede incluir PreviewView en el diseño:
PreviewView proporciona un elemento PreviewSurfaceProvider para conectar fácilmente un caso práctico de vista previa.
"ZoomLevel" ahora es "ZoomRatio" en la denominación de API.
Se cambió la nulidad de algunos parámetros del método.
Camera-Extensions y Camera-View versión 1.0.0-alpha03
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha03 y androidx.camera:camera-view:1.0.0-alpha03. Estas son las confirmaciones incluidas en camera-extensions:1.0.0-alpha03, y estas las incluidas en camera-view:1.0.0-alpha03.
Se agregó el inicializador de Context para extensiones. Se actualizó la versión de Extensions a 1.1.0.
Camera-Extensions y Camera-View versión 1.0.0-alpha02
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha02 y androidx.camera:camera-view:1.0.0-alpha02. Estas son las confirmaciones incluidas en camera-extensions:1.0.0-alpha02 y camera-view:1.0.0-alpha02.
Se agregaron pruebas para verificar que PreviewImageProcessorImpl haya implementado las marcas de tiempo de forma correcta.
Se solucionó el error de prueba ExtensionTest en Nexus 5 (API nivel 21) y se garantizó que la vista previa estuviera disponible.
Camera-Extensions y Camera-View versión 1.0.0-alpha01
Lanzamiento de androidx.camera:camera-extensions:1.0.0-alpha01 y androidx.camera:camera-view:1.0.0-alpha01. Estas son las confirmaciones incluidas en camera-extensions:1.0.0-alpha01 y camera-view:1.0.0-alpha01.
Nueva biblioteca para futuras extensiones de cámara a fin de acceder a efectos en dispositivos compatibles. Aún estamos trabajando en esta biblioteca.
Nueva clase de Camera View. Aún estamos trabajando en esta biblioteca.

References: resolución 
 resolución 
 resolución

 resolución 
 resolución 
 resolución