CameraX Uzantıları API'sı

CameraX, cihaz üreticilerinin çeşitli Android cihazlara uyguladığı uzantılara erişmek için bir Uzantı API'si sağlar. Desteklenen uzantı modlarının listesi için Kamera uzantıları bölümüne bakın.

Uzantıları destekleyen cihazların listesi için Desteklenen cihazlar bölümüne bakın.

Uzantı mimarisi

Aşağıdaki resimde kamera uzantılarının mimarisi gösterilmektedir.

Şekil 1. Kamera Uzantıları mimarisi

Bir CameraX uygulaması, CameraX Uzantıları API'si aracılığıyla uzantıları kullanabilir. İlgili içeriği oluşturmak için kullanılan CameraX Extensions API, mevcut uzantılar için sorgulamayı yönetir, ve Kamera Uzantıları OEM'si ile iletişim kurma kitaplığını açar. Bu ayar, uygulamanızın Gece, HDR, Otomatik, Boke veya yüz rötuşu.

Görüntü yakalama ve önizleme için bir uzantıyı etkinleştir

Uzantılar API'sini kullanmadan önce bir ExtensionsManager örneği alın ExtensionsManager#getInstanceAsync(Context, CameraProvider) kullanılarak yöntemidir. Bu, uzantının kullanılabilirliğini sorgulamanıza olanak tanır. ekleyebilirsiniz. Ardından, etkinleştirilmiş bir uzantı (CameraSelector) alın. İlgili içeriği oluşturmak için kullanılan uzantı modu, aşağıdaki durumlarda resim yakalama ve önizleme kullanım alanlarına bindToLifecycle() işlevini çağırmak yönteminde CameraSelector uzantısı etkin haldedir.

Resim yakalama ve önizleme kullanım alanlarına yönelik uzantıyı uygulamak için aşağıdaki kod örneğine bakın:

KotlinJava
import androidx.camera.extensions.ExtensionMode
import androidx.camera.extensions.ExtensionsManager

override fun onCreate(savedInstanceState: Bundle?) {
   
super.onCreate(savedInstanceState)

   
val lifecycleOwner = this

   
val cameraProviderFuture = ProcessCameraProvider.getInstance(applicationContext)
    cameraProviderFuture
.addListener({
       
// Obtain an instance of a process camera provider
       
// The camera provider provides access to the set of cameras associated with the device.
       
// The camera obtained from the provider will be bound to the activity lifecycle.
       
val cameraProvider = cameraProviderFuture.get()

       
val extensionsManagerFuture =
           
ExtensionsManager.getInstanceAsync(applicationContext, cameraProvider)
        extensionsManagerFuture
.addListener({
           
// Obtain an instance of the extensions manager
           
// The extensions manager enables a camera to use extension capabilities available on
           
// the device.
           
val extensionsManager = extensionsManagerFuture.get()

           
// Select the camera
           
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

           
// Query if extension is available.
           
// Not all devices will support extensions or might only support a subset of
           
// extensions.
           
if (extensionsManager.isExtensionAvailable(cameraSelector, ExtensionMode.NIGHT)) {
               
// Unbind all use cases before enabling different extension modes.
               
try {
                    cameraProvider
.unbindAll()

                   
// Retrieve a night extension enabled camera selector
                   
val nightCameraSelector =
                        extensionsManager
.getExtensionEnabledCameraSelector(
                            cameraSelector
,
                           
ExtensionMode.NIGHT
                       
)

                   
// Bind image capture and preview use cases with the extension enabled camera
                   
// selector.
                   
val imageCapture = ImageCapture.Builder().build()
                   
val preview = Preview.Builder().build()
                   
// Connect the preview to receive the surface the camera outputs the frames
                   
// to. This will allow displaying the camera frames in either a TextureView
                   
// or SurfaceView. The SurfaceProvider can be obtained from the PreviewView.
                    preview
.setSurfaceProvider(surfaceProvider)

                   
// Returns an instance of the camera bound to the lifecycle
                   
// Use this camera object to control various operations with the camera
                   
// Example: flash, zoom, focus metering etc.
                   
val camera = cameraProvider.bindToLifecycle(
                        lifecycleOwner
,
                        nightCameraSelector
,
                        imageCapture
,
                        preview
                   
)
               
} catch (e: Exception) {
                   
Log.e(TAG, "Use case binding failed", e)
               
}
           
}
       
}, ContextCompat.getMainExecutor(this))
   
}, ContextCompat.getMainExecutor(this))
}
import androidx.camera.extensions.ExtensionMode;
import androidx.camera.extensions.ExtensionsManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
   
super.onCreate(savedInstanceState);

   
final LifecycleOwner lifecycleOwner = this;

   
final ListenableFuture

Uzantıyı devre dışı bırak

Tedarikçi firma uzantılarını devre dışı bırakmak için tüm kullanım alanlarının bağlantısını kaldırın ve yakalanan görüntüyü yeniden bağlayın ve kullanım alanlarını normal kamera seçiciyle önizleyin. Örneğin, arka kamera ile CameraSelector.DEFAULT_BACK_CAMERA.

Bağımlılıklar

CameraX Extensions API, camera-extensions kitaplığında uygulandı. Uzantılar, CameraX temel modüllerine bağlıdır (core, camera2, lifecycle).

EskiKotlin
dependencies {
 
def camerax_version = "1.2.0-rc01"
  implementation
"androidx.camera:camera-core:${camerax_version}"
  implementation
"androidx.camera:camera-camera2:${camerax_version}"
  implementation
"androidx.camera:camera-lifecycle:${camerax_version}"
 
//the CameraX Extensions library
  implementation
"androidx.camera:camera-extensions:${camerax_version}"
   
...
}
dependencies {
 
val camerax_version = "1.2.0-rc01"
  implementation
("androidx.camera:camera-core:${camerax_version}")
  implementation
("androidx.camera:camera-camera2:${camerax_version}")
  implementation
("androidx.camera:camera-lifecycle:${camerax_version}")
 
// the CameraX Extensions library
  implementation
("androidx.camera:camera-extensions:${camerax_version}")
   
...
}

Eski API'yi kaldırma

1.0.0-alpha26 tarihinde kullanıma sunulan yeni Extensions API'yle, Ağustos 2019'da kullanıma sunulan Extensions API desteği sonlandırıldı. Başlangıç 1.0.0-alpha28 sürümünde, eski Extensions API kitaplığını açar. Yeni Extensions API'yi kullanan uygulamalar artık uzantı etkin CameraSelector kullanım alanlarını bağlamak için kullanabilirsiniz.

Eski Extensions API'sini kullanan uygulamalar, Yeni çıkacak CameraX ile gelecekte uyumlu olmasını sağlayacak Uzantılar API'si yayınlar.

Ek kaynaklar

CameraX hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın.

Kod Laboratuvarı

  • CameraX'i Kullanmaya Başlama
  • Kod örneği

    KameraX Uzantıları Örnek Uygulaması

    Diğer referanslar

    KameraX Satıcı Uzantıları

    KameraX Tedarikçi Firma Uzantıları Doğrulama Aracı