Extensiones de proveedores

CameraX proporciona una API para acceder a los efectos del proveedor específicos del dispositivo, como bokeh, HDR y otras funciones. La API te permite consultar si una extensión en particular está disponible en el dispositivo actual y habilitar la extensión si así lo prefieres. Es decir, si la extensión está disponible en ese dispositivo, estará habilitada; si no lo está, realizará una degradación que no afectará el funcionamiento.

No es necesario que los proveedores proporcionen una implementación para cada efecto y función. Toda función que no tenga una implementación proporcionada por el proveedor se agregará de forma predeterminada a la implementación de CameraX. La implementación predeterminada informa que la función no está disponible y omite la habilitación.

Habilita un efecto para la captura de imágenes

Para aplicar extensiones de proveedores a los casos prácticos de CameraX, crea un objeto Extender, que te permitirá configurar Builder con la configuración para tal efecto o función. Consulta la disponibilidad de la extensión, ya que si no está disponible, la llamada a enableExtension() no realizará ninguna acción.

Para implementar la extensión en el caso práctico de captura de imágenes, implementa el extensor de captura de imágenes correspondiente, como se muestra en el siguiente código de muestra:

Kotlin

    import androidx.camera.extensions.BokehExtender

    fun onCreate() {
        // Create a Builder same as in normal workflow.
        val builder = ImageCaptureConfig.Builder()

        // Create a Extender object which can be used to apply extension
        // configurations.
        val bokehImageCapture = BokehImageCaptureExtender.create(builder)

        // Query if extension is available (optional).
        if (bokehImageCapture.isExtensionAvailable()) {
            // Enable the extension if available.
            bokehImageCapture.enableExtension()
        }

        // Finish constructing configuration with the same flow as when not using
        // extensions.
        val config = builder.build()
        val useCase = ImageCapture(config)
        CameraX.bindToLifecycle(this as LifecycleOwner, useCase)
    }
    

Java

    import androidx.camera.extensions.BokehExtender;

    void onCreate() {
        // Create a Builder same as in normal workflow.
        ImageCaptureConfig.Builder builder = new ImageCaptureConfig.Builder();

        // Create a Extender object which can be used to apply extension
        // configurations.
        BokehImageCaptureExtender bokehImageCapture = new
                BokehImageCaptureExtender(builder);

        // Query if extension is available (optional).
        if (bokehImageCapture.isExtensionAvailable()) {
            // Enable the extension if available.
            bokehImageCapture.enableExtension();
        }

        // Finish constructing configuration with the same flow as when not using
        // extensions.
        ImageCaptureConfig config = builder.build();
        ImageCapture useCase = new ImageCapture(config);
        CameraX.bindToLifecycle((LifecycleOwner)this, useCase);
    }

    

Inhabilita el efecto

Para inhabilitar las extensiones del proveedor, crea una nueva instancia del caso práctico de captura de imágenes o el caso práctico de vista previa.

Recursos adicionales

Para obtener más información sobre CameraX, consulta los siguientes recursos adicionales.

Codelabs

  • Cómo comenzar a usar CameraX
  • Cómo agregar un fragmento de CameraView a tu app
  • Muestra de código

  • App de muestra de CameraX oficial