Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Ekstensi vendor

CameraX menyediakan API untuk mengakses efek—bokeh, HDR, dan lainnya—yang telah diimplementasikan oleh produsen ponsel untuk ponsel tertentu. Agar perangkat mendukung ekstensi vendor, semua hal berikut harus terpenuhi:

  • Efeknya memiliki dukungan library dari OEM perangkat.
  • Library OEM diinstal di perangkat saat ini.
  • Library OEM melaporkan perangkat mendukung ekstensi ini.
  • Perangkat memiliki versi sistem operasi yang diperlukan oleh library.

Anda dapat mengaktifkan ekstensi secara opsional: jika ekstensi didukung oleh dan secara fisik ada di perangkat, ekstensi akan diaktifkan; jika tidak, ini akan didegradasi halus.

Vendor tidak diharuskan menyediakan implementasi untuk setiap efek dan fitur. Kapabilitas yang tidak disertai implementasi vendor akan ditetapkan secara default ke implementasi CameraX. Implementasi default ini melaporkan bahwa kapabilitas tidak tersedia sehingga langkah untuk mengaktifkannya dapat dilewati.

Arsitektur ekstensi

Gambar berikut menampilkan arsitektur untuk ekstensi dengan CameraX.

Gambar 1. Arsitektur CameraX untuk ekstensi

Ekstensi terpisah dari inti Camera2 CameraX. Dalam diagram, panah berwarna merah menunjukkan alur data utama saat pengguna memicu fitur berbasis ekstensi, seperti pengambilan gambar HDR.

Mengaktifkan efek untuk pengambilan gambar

Untuk menerapkan ekstensi vendor ke kasus penggunaan CameraX, buatlah objek Extender, yang memungkinkan Anda mengonfigurasi Builder dengan setelan untuk efek atau fungsi tersebut. Kueri ekstensi untuk memeriksa ketersediaan, karena jika ekstensi tidak tersedia, panggilan enableExtension() tidak akan berfungsi apa pun.

Untuk mengimplementasikan ekstensi pada kasus penggunaan pengambilan gambar, implementasikan extender pengambilan gambar yang terkait seperti ditunjukkan dalam contoh kode berikut:

Kotlin

    import androidx.camera.extensions.BokehExtender

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

        // Create a camera provider
        val cameraProvider : ProcessCameraProvider = ... // Get the provider instance

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

        // Select the camera
        val cameraSelector = CameraSelector.Builder()
                                           .requireLensFacing(CameraX.LensFacing.BACK)
                                           .build()

        // 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 useCase = ImageCapture.Builder().build()
        cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, useCase)
    }
    

Java

    import androidx.camera.extensions.BokehExtender;

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

        // Create a camera provider
        ProcessCameraProvider cameraProvider = ...; // Get the provider instance

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

        // Select the camera
        CameraSelector cameraSelector = new CameraSelector.Builder().
                                                          .requireLensFacing(CameraX.LensFacing.BACK)
                                                          .build();

        // 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.
        ImageCapture useCase = new ImageCapture.Builder.build();
        cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, useCase);
    }

    

Menonaktifkan efek

Untuk menonaktifkan ekstensi vendor, buatlah instance kasus penggunaan ImageCapture atau Preview baru.

Referensi lainnya

Untuk mempelajari CameraX lebih lanjut, lihat referensi tambahan berikut.

Codelab

  • Memulai CameraX
  • Contoh kode

  • Contoh aplikasi CameraX resmi