ベンダー拡張機能

CameraX には、デバイスに固有のベンダー効果(ピンぼけ、HDR、その他の機能など)を使用するための API が用意されています。この API を使用すると、特定の拡張機能を現在のデバイスで利用できるかどうかを照会したり、拡張機能を選択的に有効にしたりできます。つまり、拡張機能は、デバイスで利用できる場合は有効になり、利用できない場合はグレースフル デグラデーションが行われます。

ベンダーはすべての効果および機能の実装を提供する必要はありません。ベンダー提供の実装がない機能の場合、デフォルトで CameraX の実装が適用されます。デフォルトの実装では機能を利用できないことが報告され、その有効化がスキップされます。

画像キャプチャの効果を有効にする

ベンダー拡張機能を CameraX のユースケースに適用するには、Extender オブジェクトを作成します。これにより、その効果または機能の設定で Builder を構成できます。拡張機能を利用できない場合は enableExtension() を呼び出しても何も実行されないため、拡張機能が利用可能かどうかを照会してください。

画像キャプチャ ユースケースの拡張機能を実装するには、次のコードサンプルに示すように、対応する画像キャプチャ エクステンダーを実装します。

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);
    }

    

効果を無効にする

ベンダー拡張機能を無効にするには、画像キャプチャ ユースケースまたはプレビュー ユースケースの新しいインスタンスを作成します。

参考情報

CameraX について詳しくは、以下の参考情報をご確認ください。

コードラボ

  • CameraX のスタートガイド
  • コードサンプル

  • CameraX の公式サンプルアプリ