CameraX Satıcı Uzantıları

Cihaz üreticileri, cihaza özel efektleri CameraX uzantıları arabirimi aracılığıyla üçüncü taraf geliştiricilere göstermek için CameraX OEM satıcı kitaplığını uygulayabilir. CameraX, çalışma zamanında yüklenen satıcı tarafından uygulanan sınıflar için CameraX uzantıları arabirimini tanımlar. Bu sayfa, OEM satıcı kitaplığının nasıl uygulanacağını ve cihazlarda nasıl etkinleştirileceğini açıklar.

Satıcı kitaplığını uygulamadan önce CameraX Jetpack destek kitaplığının nasıl çalıştığını anladığınızdan emin olun. Daha CameraX hakkında bilgi almak için bkz CameraX bakış . Satıcı uzantıları hakkında daha fazla bilgi için bkz Satıcı uzantıları .

Mimari

Mimari

Şekil 1. Satıcının uzantıları mimarisi şeması

Bu şema, CameraX satıcı uzantılarının mimarisini açıklar. Üçüncü taraf uygulamalar CameraX uzantıları kütüphanesinden (kamera-uzantıları) karşı inşa ve kullanımı olan kamera uzantıları kamu API (kamera-uzantıları API). Kamera uzantıları API'si, CameraX tarafından tanımlanır ve kamera uzantıları kitaplığının yeni bir sürümü yayınlandığında güncellenir. Kamera uzantıları genel API'sinin ve kamera uzantıları kitaplığının sürümleri aynıdır.

Uzantıları arayüzü (uzantılar-arayüzü) CameraX tarafından tanımlanan ve OEM satıcı kütüphanesinden (kamera-uzantıları-saplama) konuşursan bulunan kamera uzantıları kütüphane olanak tanır. OEM kitaplığı, uzantı arabirimi sürümüyle eşleşen bir uygulamaya sahip olmalıdır. Kamera uzantıları kitaplığının tek bir uygulaması, uzantı arabiriminin birden çok sürümünü destekleyebilir.

OEM satıcı kitaplığını uygulama

Bu uygulama talimatları, örnek olarak bokeh (portre) satıcı uzantısını kullanır, ancak bunları HDR, güzellik ve gece modu uzantıları gibi diğer uzantılara uygulayabilirsiniz. Bunu yapmak için, kopyalayabilir ve bokeh uzantısı için kullanılan kodu yapıştırın ve (yerine örneğin istenen uzantılı uzatma adını değiştirmek BokehImageCaptureExtenderImpl ile HdrImageCaptureExtenderImpl ).

Her efekt için bir uygulama sağlamanız gerekmez. Satıcı uygulaması olmayan bir efekt, varsayılan olarak CameraX uygulamasına geçer. Bir efekt mevcut değilse, varsayılan uygulama efekti etkinleştirmez ve üçüncü taraf geliştiriciye efektin kullanılamadığını bildirir.

Sürüm doğrulama

OEM kütüphane yüklerken, OEM kütüphane sürümü arayüz uzantıları ile uyumlu bir sürümünü içerdiğini CameraX doğrular (bu belgede uzatma-sürüm olarak anılacaktır). Sürüm uyumluluğunu belirlemek için CameraX yalnızca ana ve küçük sürümleri (örneğin 1.0) kontrol eder, ancak yama sürümünü kontrol etmez çünkü bu, arayüz değişiklikleri için değil, yalnızca hata düzeltmeleri için kullanılır. Belirli API'ler için gerekli uzantı sürümü bu belgede belirtilmiştir. Belirli bir uzantı sürümü olmayan API'ler, uzantı sürümü 1.0 ile uyumludur.

Sürümünü doğrulamak için, CameraX sorgular ExtensionVersionImpl arayüzü. Ardından CameraX, çağrılabilecek işlevselliği belirlemek için OEM kitaplığı tarafından bildirilen sürümü kullanır.

başlatma

CameraX, OEM kitaplığı tarafından uygulanan uzantı arabiriminin sürümünü belirlediğinde başlatma işlemini başlatır. InitializerImpl.init oem kütüphanesine yöntem sinyalleri bir uygulama uzantılarını kullanmak istediği. Kadar yapılır (kenara sürüm kontrolü itibaren) OEM kütüphanesine Başka hiçbir çağrılar OnExtensionsInitializedCallback bir başarı durumuyla denir.

Bu yöntem, sürüm 1.1'den itibaren uygulanmalıdır. Ayrıntılar için de kaynağını görmek InitializerImpl .

ExtenderStateListener arayüzü

CameraX seti alakalı OEM kütüphanesini izni verme boru hattında çeşitli yerlerde içine kanca sağlar SessionParameters ve CaptureRequest değerler. OEM kütüphane, belirtilen zamanlarda bu değerleri ayarlamak uygulamaya izin vermek için ExtenderStateListener arayüzü. Bu arabirim, önizleme, görüntü yakalama, bokeh veya HDR genişletici olsun, herhangi bir genişleticinin parçası olarak uygulanmalıdır.

Görüntü yakalama

Uzantısını desteklemek için görüntü yakalama , karşılık gelen uygulanması ImageCaptureExtender arayüzü (örneğin, BokehImageCaptureExtender veya HdrImageCaptureExtender ).

ImageCaptureExtender görüntü yakalama ile ilişkili uzantıları için gerekli arabirimler içerir.

CaptureProcessor arayüzü işleme sonrası uygulama katmanında yapılması için uygulanması gerekir. 1.1 sürümü arayüz uzantıları gibi, sadece YUV_420_888 giriş görüntü formatı desteklenmelidir. CaptureProcessor işleme kamera HAL yapılır eğer arayüz gerekli değildir.

Aşağıdaki diyagram, görüntü yakalama işlemi akışını gösterir.

Görüntü yakalama süreci akışı

Şekil 2. Resim yakalama akış şemasıdır

Örnek: BokehImageCaptureExtenderImpl

Görüntü yakalamak için bokeh uzantısını desteklemek için, uygulamak BokehImageCaptureExtenderImpl sınıfı androidx.camera.extensions.impl pakette.

Ön izleme

Uzantısını desteklemek için önizleme , karşılık gelen uygulanması PreviewExtender (örneğin, arayüz BokehPreviewExtender veya HdrPreviewExtender ). PreviewExtender arayüzü önizleme ilgili uzantıları için gerekli arabirimler içerir.

Ayrıntılar için de kaynağını görmek PreviewExtender .

Önizleme uzantısı için görüntü işleme, kamera HAL'inde veya uygulama katmanında gerçekleştirilebilir. Bu değeri belirlenir ProcessorType tarafından döndürülür, PreviewExtenderImpl .

Eğer PROCESSOR_TYPE_REQUEST_UPDATE_ONLY tipi döndürülür, işleme yoluyla HAL gerçekleştirilir CaptureRequest tuşları. Eğer PROCESSOR_TYPE_IMAGE_PROCESSOR türü döndürülür, işleme göre uygulama katmanında gerçekleştirilir PreviewImageProcessorImpl arabirimi. Bu arayüz bir çalışır Image ve TotalCaptureResult çifti. 1.1 sürümü arayüz uzantıları gibi, sadece YUV_420_888 giriş görüntü formatı desteklenmelidir.

Aşağıdaki diyagram, önizleme satıcı uzantısı için süreç akışını gösterir.

Önizleme akış şeması

Şekil 3. Ön akış diyagramıdır

Örnek: BokehPreviewExtenderImpl

Önizleme için bokeh desteklemek için, uygulamak BokehPreviewExtenderImpl sınıfı androidx.camera.extensions.impl pakette.

Referans uygulaması

Bir referans OEM satıcı kütüphane uygulaması için bkz / platform / çerçeveler / destek / kamera / entegrasyon-test / extensionstestlib / . Bu uygulamanın, efektleri fiilen uygulamadan geçişler gerçekleştirdiğini unutmayın.

Bir cihazda satıcı kitaplığını kurma

OEM satıcı kitaplığı bir uygulamada yerleşik değildir, bunun yerine çalışma zamanında CameraX tarafından cihazdan yüklenir. <uses-library> etiketi beyan androidx.camera.extensions.impl tanımlanan kütüphane, AndroidManifest.xml dosyasının, CameraX bir bağımlılık olduğunu ve zamanında yüklenmelidir. Bu, satıcı uzantılarını kullanan üçüncü taraf uygulamalarının OEM satıcı kitaplığını otomatik olarak yüklemeye çalışmasına olanak tanır. OEM kitaplığı isteğe bağlı olarak işaretlenmiştir, böylece uygulamalar cihazda kitaplığa sahip olmayan cihazlarda çalışabilir.

Cihaz üreticisi OEM kitaplığını uygulama tarafından keşfedilebilmesi için cihaza yerleştirdiği sürece, bir uygulama bir satıcı uzantısını kullanmaya çalıştığında CameraX bu davranışı otomatik olarak işler.

OEM kitaplığını bir aygıtta kurmak için aşağıdakileri yapın:

  1. Tarafından gerekli bir izin dosyası, ekleme <uses-library> aşağıdaki biçimi kullanarak, etiketi: /etc/permissions/ ANY_FILENAME .xml . Örneğin, /etc/permissions/camera_extensions.xml . Bu dizindeki dosyalar adlı kütüphanenin bir eşleme sağlamanız <uses-library> cihazda gerçek dosya yoluna.
  2. Dosyaya gerekli bilgileri eklemek için aşağıdaki örneği kullanın.

    • name olmalıdır androidx.camera.extensions.impl o CameraX aramalar için kütüphane aynı derecede.
    • file (örneğin, uzantıları uygulanmasını içeren dosyanın mutlak yolu /system/framework/androidx.camera.extensions.impl.jar ).
    <?xml version="1.0" encoding="utf-8"?>
    <permissions>
        <library name="androidx.camera.extensions.impl"
                 file="OEM_IMPLEMENTED_JAR" />
    </permissions>
    

Android 12 veya daha yüksek ise, CameraX uzantıları destekleyen cihazlar olmalıdır ro.camerax.extensions.enabled mülk seti true bir cihaz destekleri uzantıları olmadığını sorgulamak için izin verir. Bunu yapmak için cihaz make dosyasına aşağıdaki satırı ekleyin:

PRODUCT_VENDOR_PROPERTIES += \
    ro.camerax.extensions.enabled=true \

doğrulama

En örneği uygulamasını kullanmak, geliştirme aşamasında OEM satıcı kütüphanesinin uygulamanızı test etmek androidx-main/camera/integration-tests/extensionstestapp/ çeşitli satıcı uzantıları üzerinden çalıştığı.

Eğer uygulanmasını tamamladıktan sonra kullanmak CameraX Satıcı Uzantıları Doğrulama Aracı satıcı kütüphane doğru uygulandığını doğrulamak için otomatik ve manuel testler.

Sıkça Sorulan Sorular (SSS)

API seviyelerinde herhangi bir kısıtlama var mı?

Evet. Bu, OEM satıcı kitaplığı uygulamasının gerektirdiği Android API özellik kümesine bağlıdır. Örneğin, ExtenderStateListener.onPresetSession() kullanır SessionConfiguration.setSessionParameters() etiketleri bir temel kümesi ayarlamak için arayın. Bu çağrı yalnızca API düzeyi 28 ve üzeri sürümlerde kullanılabilir. Belirli arayüz yöntemleri ile ilgili ayrıntılar için bkz API başvuru belgelerine .