Cihaz üreticileri bokeh, gece modu ve HDR gibi uzantıları gösterebilir Kamera Uzantıları arayüzü üzerinden üçüncü taraf geliştiricilere kitaplığını oluşturur. Geliştiriciler, Kamera2 Uzantıları API'si ve KameraX Extensions API ziyaret edin.
Desteklenen uzantıların listesi için bu, Camera2'de aynıdır. ve CameraX, bkz. KameraX Uzantıları API'si. Bir uzantı eklemek isterseniz şuna hata bildirin: Sorun İzleyici.
Bu sayfada, şurada OEM tedarikçi kitaplığının nasıl uygulanacağı ve etkinleştirileceği açıklanmaktadır: cihazlar.
Mimari
Aşağıdaki şemada, Kamera Uzantılarının mimarisi açıklanmaktadır
arayüz veya extensions-interface
:
Şekil 1. Kamera Uzantıları mimari şeması
Şemada gösterildiği gibi, Kamera Uzantılarını desteklemek için
OEM tedarikçi kitaplığı tarafından sağlanan extensions-interface
kodunu uygulayın. Sizin
OEM tedarikçi kitaplığı iki API'yi etkinleştirir:
KameraX Extensions API ve
Kamera2 Uzantıları API'si,
sırasıyla CameraX ve Camera2 uygulamaları tarafından kullanılan
satıcı uzantılarıdır.
OEM tedarikçi kitaplığını uygulama
OEM tedarikçi kitaplığını uygulamak için
camera-extensions-stub
dosyalarını sistem kitaplığı projesine
ekleyebileceksiniz. Bu dosyalar Kamera Uzantılarını tanımlar
kullanır.
camera-extensions-stub
dosyaları aşağıdaki kategorilere ayrılır:
Temel arayüz dosyaları (değişiklik yapmayın)
PreviewExtenderImpl.java
ImageCaptureExtenderImpl.java
ExtenderStateListener.java
ProcessorImpl.java
PreviewImageProcessorImpl.java
CaptureProcessorImpl.java
CaptureStageImpl.java
RequestUpdateProcessorImpl.java
ProcessResultImpl.java
advanced/AdvancedExtenderImpl.java
advanced/Camera2OutputConfigImpl.java
advanced/Camera2SessionConfigImpl.java
advanced/ImageProcessorImpl.java
advanced/ImageReaderOutputConfigImpl.java
advanced/ImageReferenceImpl.java
advanced/MultiResolutionImageReaderOutputConfigImpl.java
advanced/OutputSurfaceImpl.java
advanced/RequestProcessorImpl.java
advanced/SessionProcessorImpl.java
advanced/SurfaceOutputConfigImpl.java
Zorunlu uygulamalar (uygulamanızı ekleyin)
ExtensionVersionImpl.java
InitializerImpl.java
Bokeh uzatıcı sınıfları (Bokeh uzantısı destekleniyorsa uygulayın)
BokehImageCaptureExtenderImpl.java
BokehPreviewExtenderImpl.java
advanced/BokehAdvancedExtenderImpl.java
Gece uzatıcı sınıfları (Gece uzantısı destekleniyorsa uygulayın)
NightImageCaptureExtenderImpl.java
NightPreviewExtenderImpl.java
advanced/NightAdvancedExtenderImpl.java
Otomatik uzatma sınıfları (Otomatik uzantı destekleniyorsa uygulayın)
AutoImageCaptureExtenderImpl.java
AutoPreviewExtenderImpl.java
advanced/AutoAdvancedExtenderImpl.java
HDR uzatıcı sınıfları (HDR uzantısı destekleniyorsa uygulayın)
HdrImageCaptureExtenderImpl.java
HdrPreviewExtenderImpl.java
advanced/HdrAdvancedExtenderImpl.java
Yüz rötuşu uzatıcı sınıfları (yüz rötuşu uzantısı destekleniyorsa uygulayın)
BeautyImageCaptureExtenderImpl.java
BeautyPreviewExtenderImpl.java
advanced/BeautyAdvancedExtenderImpl.java
Yardımcı programlar (isteğe bağlı, silinebilir)
advanced/Camera2OutputConfigImplBuilder.java
advanced/Camera2SessionConfigImplBuilder.java
Her uzantı için uygulama sağlamanız gerekmez. Şu durumda:
bir uzantı uygulama, isExtensionAvailable()
değerini false
değerini döndürecek şekilde ayarlayın veya
ilgili Genişletici sınıflarını kaldırın. Camera2 ve CameraX Uzantıları
API'ler uygulamaya uzantının kullanılamadığını bildirir.
Şimdi Camera2 ve CameraX Uzantıları API'lerinin tedarikçi firma kitaplığını kullanarak bir uzantıyı etkinleştirin. Aşağıdaki şemada uçtan uca akışa örnek olarak Gece uzantısını kullanabilirsiniz:
Şekil 2. Gece uzatma uygulaması
Sürüm doğrulaması:
Camera2/X, kameranın
ExtensionVersionImpl.checkApiVersion()
numarasını çağırarak OEM tarafından uygulananextensions-interface
sürümü Camera2/X ile uyumludur desteklenir.Sağlayıcı kitaplığını başlatma:
InitializerImpl
, tedarikçi kitaplığını başlatan birinit()
yöntemine sahip. Camera2/X, Genişletici sınıflarına erişmeden önce başlatma işlemini tamamlar.Genişletici sınıflarını gösterme:
Uzantının Genişletici sınıflarını gösterir. İki Uzatma Aparatı var türler: Temel Uzatma ve Gelişmiş Uzatma. Bir tane uygulamalısınız Tüm uzantılar için genişletici türü. Daha fazla bilgi için bkz. Temel Genişletici ve Gelişmiş Genişletici.
Camera2/X, verileri almak için Genişletici sınıflarını somutlaştırır ve onlarla etkileşime girer bilgi edinin ve uzantıyı etkinleştirin. Kamera2/X, belirli bir uzantı için Genişletici sınıflarını birkaç kez örneklendirin. Bu nedenle, ilk kullanıma hazırlama süreci sırasında
init()
Şunu yapın: yalnızca kamera oturumu başlamak üzereyken ağır kaldırmaonInit()
çağrıldığında örneğin Temel Genişletici'de veyainitSession()
, Advanced Extender'da çağrılıyor.Night uzantısı için aşağıdaki Extender sınıfları Temel Uzatma Aparatı türü:
NightImageCaptureExtenderImpl.java
NightPreviewExtenderImpl.java
Gelişmiş Uzatma türü için:
NightAdvancedExtenderImpl.java
Uzantı kullanılabilirliğini kontrol edin:
isExtensionAvailable()
, uzantıyı etkinleştirmeden önce uzantı, belirtilen kamera kimliğinde Uzatma Aracı üzerinden mevcut. kullanır.Extender'ı kamera bilgileriyle başlatın:
Camera2/X, Extender örneğinde
init()
yöntemini çağırır ve kameraya iletir Kimlik veCameraCharacteristics
.Sorgu bilgileri:
Desteklenen gibi bilgileri almak için Extender sınıfını çağırır yine de tahmini gecikmeyi yakalayın ve istek anahtarlarını kullanıma hazırlanırken Genişletici'yi tıklayın.
Genişleticide uzantıyı etkinleştirin:
Extender sınıfı, Search Ads 360'ı etkinleştirmek için gereken tüm sınıfını kullanır. OEM'in ilgisini çekmek için bir mekanizma sunar. yakalama isteği ekleme gibi kamera2 ardışık düzenine uygulama parametrelerini veya bir son işlemciyi etkinleştirmenizi sağlar.
Gelişmiş Genişletme türü için Camera2/X, Uzantıyı etkinleştirmek için
SessionProcessorImpl
. Camera2/X,SessionProcessorImpl
örneği için aşağıdaki koducreateSessionProcessor()
çağırarak Uzatma Aparatı.
Aşağıdaki bölümlerde uzantı akışı daha ayrıntılı olarak açıklanmaktadır.
Sürüm doğrulama
Çalışma zamanında cihazdan OEM tedarikçi kitaplığını yüklerken Camera2/X
kitaplığın extensions-interface
sürümüyle uyumlu olup olmadığını doğrular.
extensions-interface
, anlamsal sürüm oluşturma kullanır veya
MAJOR.MINOR.PATCH (ör. 1.1.0 veya 1.2.0). Ancak yalnızca
Sürüm doğrulaması sırasında ana ve alt sürümler kullanılır.
Sürümü doğrulamak için Camera2/X'i arar.
Desteklenen ExtensionVersionImpl.checkApiVersion()
extensions-interface
sürüm. Daha sonra Camera2/X,
Uzantının etkinleştirilip etkinleştirilemeyeceğini ve hangi özellikleri içerdiğini belirlemek için OEM kitaplığı
tarafından çağrılacaktır.
Ana sürüm uyumluluğu
extension-interface ana sürümleri farklı Camera2/X ile tedarikçi kitaplığı arasında uyumsuz olarak kabul edilir ve uzantı devre dışıdır.
Geriye dönük uyumluluk
Ana sürüm aynı olduğu sürece Camera2/X,
Önceki sürümlerle oluşturulan OEM tedarikçi kitaplıklarıyla geriye dönük uyumluluk
extensions-interface
sürüm. Örneğin, Camera2/X
extensions-interface
1.3.0, 1.0.0'ı uygulayan OEM tedarikçi kitaplıkları,
1.1.0 ve 1.2.0 hâlâ uyumludur. Bu aynı zamanda,
satıcı kitaplığının belirli bir sürümünü kullanıyorsanız Camera2/X,
kullanıma sunulacak extension-interface
sürümleriyle geriye dönük uyumludur.
Yönlendirme uyumluluğu
Daha yeni extensions-interface
sürümünün satıcı kitaplıklarıyla ileriye dönük uyumluluk
Bu ise size, yani OEM'ye bağlıdır. Uzantıları uygulamak için bazı özelliklere ihtiyacınız varsa,
uzantıları belirli bir sürümden itibaren etkinleştirmek isteyebilirsiniz. Burada
şu durumlarda desteklenen extensions-interface
sürümünü iade edebilirsiniz:
Camera2/X kitaplık sürümü, şartları karşılıyor. Camera2/X sürümleri
desteklenmiyorsa 99.0.0 gibi uyumsuz bir sürümü döndürerek
uzantıları devre dışı bırakın.
Satıcı kitaplığını başlatma
OEM tarafından uygulanan extensions-interface
sürümünü doğruladıktan sonra
kamera2/X ilk kullanıma hazırlama işlemini başlatır. İlgili içeriği oluşturmak için kullanılan
InitializerImpl.init()
yöntemi, bir uygulamanın OEM kitaplığına bir işlemin yapmaya çalıştığını belirtir
nasıl kullanacağınızı göstereceğim.
Camera2/X, OEM kitaplığına başka arama yapmaz (sürüm kontrolü dışında)
OEM tedarikçi kütüphanesi OnExtensionsInitializedCallback.onSuccess()
çağırana kadar
tıklayın.
Tekliflerinizi otomatikleştirmek ve optimize etmek için
InitializerImpl
extensions-interface
1.1.0 itibarıyla. Camera2/X, kitaplık başlatma işlemini atlar
extensions-interface
1.0.0'ı uygular.
Temel Uzatıcı ve Gelişmiş Uzatıcı Karşılaştırması
İki tür extensions-interface
uygulaması vardır: Temel Genişletme ve
Gelişmiş Uzatma Aracı. Advanced Extender, şu tarihten beri destekleniyor:
extensions-interface
1.2.0.
Kamera HAL veya HAL'sindeki resimleri işleyen uzantılar için Temel Genişletici'yi uygulayın. YUV akışlarını işleyebilen bir son işlemci kullanmalıdır.
Camera2'yi özelleştirmesi gereken uzantılar için Gelişmiş Genişletici'yi uygulayın2 akış yapılandırmasını ve yakalama isteklerini gönderin.
Karşılaştırma için aşağıdaki tabloya bakın:
Uzatma Aparatı | Gelişmiş Uzatma Aparatı | |
---|---|---|
Akış yapılandırmaları | Sabit Önizleme: PRIVATE veya YUV_420_888 (işleyen varsa) Yine de yakalama: JPEG veya YUV_420_888 (işleyen varsa)
|
OEM tarafından özelleştirilebilir. |
Yakalama isteği gönderiliyor | Yalnızca Camera2/X yakalama isteği gönderebilir. Parametreleri talep edebilir. Görüntü yakalama için işlemci sağlandığında Camera2/X birden fazla yakalama isteği gönderebilir ve tüm resimleri gönderip işleyene iletebilir. | Size bir RequestProcessorImpl örneği sağlandığı için
kamera2 yakalama isteğini yürütüp sonuçları ve Görüntü'yü alın.
Kamera2/X, |
Kamera hattındaki kancalar |
|
|
Uygun | Kamera HAL'sine veya işleyen bir işlemciye uygulanan uzantılar YUV resimleri. |
|
Desteklenen API sürümü | Kamera2 Uzantıları: Android 13 veya sonraki sürümler CameraX Uzantıları: camera-extensions 1.1.0 veya üstü |
Camera2 Uzantıları: Android 12L veya sonraki sürümler CameraX Uzantıları: camera-extensions 1.2.0-alpha03 veya üstü |
Uygulama akışları
Aşağıdaki tabloda üç tür uygulama akışı ve bunların ilgili Kamera Uzantıları API çağrıları. Kamera2/X ise desteği sağlamak için satıcı kitaplığını doğru şekilde uygulamanız İlerleyen bölümlerde bu konuyu daha ayrıntılı bir şekilde açıklayacağız.
Camera2 uzantıları | CameraX uzantıları | |
---|---|---|
Sorgu uzantılarının kullanılabilirliği | CameraExtensionCharacteristics
.getSupportedExtensions
|
ExtensionsManager.
isExtensionAvailable
|
Sorgu bilgileri | CameraExtensionCharacteristics.
getExtensionSupportedSizes
CameraExtensionCharacteristics.
getEstimatedCaptureLatencyRangeMillis
CameraExtensionCharacteristics.
getAvailableCaptureRequestKeys
CameraExtensionCharacteristics.
getAvailableCaptureResultKeys
|
ExtensionsManager.
getEstimatedCaptureLatencyRange
CameraX, kitaplıktaki geri kalan bilgileri işler. |
Uzantı etkinken önizleme ve görüntü yakalama | CameraDevice.
createExtensionSession
|
val cameraSelector = ExtensionsManager.
getExtensionEnabledCameraSelector
|
Uzatma Aparatı
Temel Genişletici arayüzü, kameranın çeşitli yerlerinde kancalar sağlar. ardışık düzendir. Her uzantı türünde, OEM'lerin ihtiyaç duyduğu ilgili Genişletici sınıfları bulunur pek çok yolu vardır.
Aşağıdaki tabloda, OEMS'lerin her bir kuruluş birimi için uygulaması gereken Genişletici sınıfları yer almaktadır uzantı:
Uygulanacak sınıfları genişletme | |
---|---|
Gece | NightPreviewExtenderImpl.java
|
HDR | HdrPreviewExtenderImpl.java
|
Otomotiv | AutoPreviewExtenderImpl.java
|
Boke | BokehPreviewExtenderImpl.java
|
Yüz rötuşu | BeautyPreviewExtenderImpl.java
|
Yer tutucu olarak PreviewExtenderImpl
ve ImageCaptureExtenderImpl
kullanırız.
aşağıdaki örnekte görebilirsiniz. Bunları, gerçek
dosyalar.
Temel Genişletici'nin özellikleri:
CameraCaptureSession
öğesini yapılandırırken oturum parametrelerini ekleyin (onPresetSession
) tıklayın.- Yakalama oturumu başlangıç ve kapanış etkinlikleri hakkında sizi bilgilendirip tek bir
HAL'yi döndürülen parametrelerle bilgilendirme isteği (
onEnableSession
,onDisableSession
) tıklayın. - İstek için yakalama parametrelerini ekleyin
(
PreviewExtenderImpl.getCaptureStage
,ImageCaptureExtenderImpl.getCaptureStages
) tıklayın. - Önizleme için işlemciler ekleyin ve işleme alınabilen verileri yakalamaya devam edin
YUV_420_888
akışı.
Kamera2/X'in, üçünü sağlamak için extensions-interface
öğesini nasıl çağırdığına bakalım
uygulama akışları için geçerlidir.
Uygulama akışı 1: Uzantı kullanılabilirliğini kontrol etme
Şekil 3. Temel Genişletici'de uygulama akışı 1
Bu akışta Camera2/X, doğrudan şu isExtensionAvailable()
yöntemini çağırır:
telefon etmeden hem PreviewExtenderImpl
hem de ImageCaptureExtenderImpl
init()
. Uzantıların etkinleştirilmesi için her iki Genişletici sınıfının da true
döndürmesi gerekir.
Bu, genellikle uygulamaların, belirtilen uzantının olup olmadığını kontrol ettiği ilk adımdır. type (tür), uzantı etkinleştirilmeden önce belirli bir kamera kimliği için desteklenir. Bunun nedeni, bazı uzantıların yalnızca belirli kamera kimliklerinde desteklenmesidir.
Uygulama akışı 2: Sorgu bilgileri
4.Şekil Temel Genişletici'de uygulama akışı 2
Uygulamalar uzantının kullanılabilir olup olmadığını belirledikten sonra ve uzantıyı etkinleştirmeden önce aşağıdaki bilgileri inceleyin.
Yine de yakalama gecikme aralığı:
ImageCaptureExtenderImpl.getEstimatedCaptureLatencyRange
, şu aralığı döndürür: uygulamanın uygun olup olmadığını değerlendirmek için uzantıyı geçerli senaryo için etkinleştirin.Önizleme ve yakalama yüzeyi için desteklenen boyutlar:
ImageCaptureExtenderImpl.getSupportedResolutions
vePreviewExtenderImpl.getSupportedResolutions
, resim biçimleri listesini döndürür ve yüzey biçimi ve boyutu için desteklenen boyutlar.Desteklenen istek ve sonuç anahtarları: Camera2/X, desteklenen yakalamayı almak için aşağıdaki yöntemleri çağırır uygulamanızdan anahtarları ve sonuç anahtarlarını isteyin:
ImageCaptureExtenderImpl.getAvailableCaptureRequestKeys
ImageCaptureExtenderImpl.getAvailableCapturetResultKeys
Camera2/X, sorgulamadan önce bu Genişletici sınıflarında her zaman ilk olarak init()
numarasını çağırır
konulu videomuzu izleyin.
Uygulama akışı 3: Uzantı etkinken önizleme/yine yakalama (HAL uygulaması)
5. Şekil. Temel Genişletici'de uygulama akışı 3
Yukarıdaki şemada, önizlemeyi etkinleştirme ve yakalamanıza yardımcı olabilir. Bu, kamera HAL'sinin uzantıyı işler.
Bu akışta Camera2/X önce init()
, ardından onInit
çağrısı yaparak size bildirim gönderir.
belirtilen uzantılarla bir kamera oturumu başlamak üzere.
onInit()
uygulamasında zorlayıcı bir ilk kullanıma hazırlama işlemi gerçekleştirebilirsiniz.
CameraCaptureSession
yapılandırılırken Kamera2/X şunları çağırır:
Oturum parametrelerini almak için onPresetSession
. Yakalama oturumu
başarıyla yapılandırıldığında, Camera2/X, onEnableSession
işlemini çağırarak bir
CaptureStageImpl
örnek olabilir. Kamera2/X
hemen bu yakalama parametreleriyle tek bir istek göndererek
HAL. Benzer şekilde, yakalama oturumu kapatılmadan önce Camera2/X,
onDisableSession
ve ardından döndürülen yakalamayla tek bir istek gönderir.
parametreleridir.
Camera2/X tarafından tetiklenen yinelenen istek, istek parametrelerini içerir
PreviewExtenderImpl.getCaptureStage()
tarafından iade edildi. Dahası, hâlâ
yakalama isteği,
ImageCaptureExtenderImpl.getCaptureStages()
Son olarak Kamera2/X, kamera oturumu bittikten sonra onDeInit()
öğesini çağırır.
Kaynakları onDeinit()
sürümünde serbest bırakabilirsiniz.
İşlemciyi önizle
Kamera HAL'sine ek olarak, bir işlemciye de uzantılar uygulayabilirsiniz.
İşleyen türünü belirtmek için PreviewExtenderImpl.getProcessorType
uygulayın
aşağıda açıklandığı gibi:
PROCESSOR_TYPE_NONE
: İşleyen yok. Görüntüler kamerada işlenir HAL.PROCESSOR_TYPE_REQUEST_UPDATE_ONLY
: İşlemci türü şunları yapmanıza olanak tanır: şuna göre yeni yakalama isteği parametreleriyle tekrarlanan isteği güncelleyin: en sonTotalCaptureResult
.PreviewExtenderImpl.getProcessor
, bir değer döndürmelidirRequestUpdateProcessorImpl
TotalCaptureResult
örneğini işleyen ve şunu döndüren bir örnek: Tekrarlanan isteği güncellemek içinCaptureStageImpl
örneği.PreviewExtenderImpl.getCaptureStage()
,CaptureStageImpl
değerini döndürür.PROCESSOR_TYPE_IMAGE_PROCESSOR
: Bu tür, bir dönüşüm hunisi uygulamak için bir işlemcisi ileYUV_420_888
görüntüyü işleyebilir ve çıktıyı birPRIVATE
yüzeyi.Bir
PreviewImageProcessorImpl
PreviewExtenderImpl.getProcessor
konumundaki örnek. İşleyen sorumludurYUV_420_888
giriş resmini işlemek için kullanılır. ÇıkışıPRIVATE
önizleme biçimi. Camera2/X, bunun yerineYUV_420_888
yüzeyi kullanır Önizleme içinCameraCaptureSession
öğesini yapılandırmak üzerePRIVATE
.Akış için aşağıdaki çizime bakın:
6. Şekil. Akışı PreviewImageProcessorImpl
ile önizleyin
PreviewImageProcessorImpl
arayüzü ProcessImpl
uzantısına sahiptir ve
üç önemli yöntem vardır:
onOutputSurface(Surface surface, int imageFormat)
, çıkış yüzeyini ayarlar. temsil eder.PreviewImageProcessorImpl
içinimageFormat
bir pikseldir (PixelFormat.RGBA_8888
gibi).onResolutionUpdate(Size size)
, giriş resminin boyutunu ayarlar.onImageFormatUpdate(int imageFormat)
, girişin resim biçimini belirler görüntüsüdür. Şu anda yalnızcaYUV_420_888
olabilir.
Görüntü yakalama işlemcisi
Yine de yakalama için, bir
CaptureProcessorImpl
örneği ImageCaptureExtenderImpl.getCaptureProcessor
ile gösterilir. İşlemci:
çekilen YUV_420_888
görüntülerin listesini işlemek,
TotalCaptureResult
örnek ve çıkışı bir YUV_420_888
yüzeyine yazın.
yakalamaya devam eder.
Akışı aşağıdaki şemada görebilirsiniz:
7.Şekil CaptureProcessorImpl
ile akışı yakalamaya devam edin
Camera2/X, yapılandırmada fotoğraf çekme işlemi için
YUV_420_888
biçimli bir yüzey kullanır ele alacağız. Camera2/X, şunu çağırarakCaptureProcessorImpl
uygulamasını hazırlar:YUV_420_888
ileCaptureProcessorImpl.onImageFormatUpdate()
.- Giriş resim boyutuyla birlikte
CaptureProcessorImpl.onResolutionUpdate()
. YUV_420_888
çıkışıylaCaptureProcessorImpl.onOutputSurface()
teşekkür ederiz.
ImageCaptureExtenderImpl.getCaptureStages
, şunun bir listesini döndürür:CaptureStageImpl
her öğe, yakalama parametrelerine sahip birCaptureRequest
örneğine eşlenir. kamera2/X tarafından gönderilen görüntülerdir. Örneğin, üçlü bir liste döndürürseCaptureStageImpl
örnek, Camera2/X üç yakalama isteği gönderir öğesini kullanarak karşılık gelen yakalama parametrelerinicaptureBurst
API'ye gidin.Alınan görüntüler ve
TotalCaptureResult
örnek bir arada paketlenir ve işlenmek üzereCaptureProcessorImpl
adresine gönderildi.CaptureProcessorImpl
, sonuç Resmini (YUV_420_888
biçimi)onOutputSurface()
çağrısıyla belirtilen çıkış yüzeyi. Camera2/X, bunu dönüştürür JPEG resimlerine yükleyebilirsiniz.
Yakalama isteği anahtarları ve sonuçları desteği
Uygulamalar, kamera önizleme ve çekime ek olarak yakınlaştırmayı ayarlayabilir, flaş parametreleri alabilir veya dokunarak odaklamayı tetikleyebilirsiniz. Bu parametreler ve uzantı uygulamanızla uyumludur.
Aşağıdaki yöntemler extensions-interface
1.3.0 sürümüne izin vermek için eklendi
uygulamanızın desteklediği parametreleri ortaya çıkarmanızı sağlar:
ImageCaptureExtenderImpl.getAvailableCaptureRequestKeys()
şunu döndürür: Uygulamanızın desteklediği istek anahtarlarını yakalamaImageCaptureExtenderImpl.getAvailableCaptureResultKeys()
şunu döndürür: Yakalama sonucunda yer alan sonuç anahtarlarını yakalama.
Kamera HAL'si uzantıyı işlerse Camera2/X yakalamayı alır.
sonuç: CameraCaptureSession.CaptureCallback
. Ancak,
işlemci uygulanır, ardından Camera2/X yakalama sonuçlarını
ProcessResultImpl
. Bu değer process()
yöntemindeki
PreviewImageProcessorImpl
ve
CaptureProcessorImpl
Raporlama sizin sorumluluğunuzdadır
ProcessResultImpl
aracılığıyla Camera2/X arasında fotoğraf çekin.
Örnek olarak aşağıdaki CaptureProcessorImpl
arayüzünün tanımına bakın.
extensions-interface
1.3.0 veya sonraki sürümlerde ikinci process()
çağrısı çağrılır:
Interface CaptureProcessorImpl extends ProcessorImpl {
// invoked when extensions-interface version < 1.3.0
void process(Map<Integer, Pair<Image, TotalCaptureResult>> results);
// invoked when extensions-interface version >= 1.3.0
void process(Map<Integer, Pair<Image, TotalCaptureResult>> results,
ProcessResultImpl resultCallback, Executor executor);
}
Yakınlaştırma, dokunarak odaklama, flaş ve pozlama gibi yaygın kamera işlemleri için için aşağıdaki tuşların kullanımını öneririz: istek ve yakalama sonucu:
- Yakınlaştırma:
CaptureRequest#CONTROL_ZOOM_RATIO
CaptureRequest#SCALER_CROP_REGION
- Odak için dokunma:
CaptureRequest#CONTROL_AF_MODE
CaptureRequest#CONTROL_AF_TRIGGER
CaptureRequest#CONTROL_AF_REGIONS
CaptureRequest#CONTROL_AE_REGIONS
CaptureRequest#CONTROL_AWB_REGIONS
- Flash:
CaptureRequest#CONTROL_AE_MODE
CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
CaptureRequest#FLASH_MODE
- Karşılaşma telafisi:
CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
1.2.0 veya önceki sürümleri uygulayan Temel Uzatma Aparatları için CameraX
Extensions API, yukarıdaki tüm anahtarları açık bir şekilde destekler. Örneğin,
extensions-interface
1.3.0, hem CameraX hem de Camera2, döndürülen listeyi dikkate alır
ve yalnızca dosyadaki anahtarları desteklemelidir. Örneğin, web sitenize geri dönmeye
yalnızca CaptureRequest#CONTROL_ZOOM_RATIO
ve
CaptureRequest#SCALER_CROP_REGION
kullanıyorsanız,
Uygulama için yalnızca dokunarak odaklama, flaş ve pozlama yakınlaştırmanın desteklendiği anlamına gelir.
izin verilmez.
Gelişmiş Uzatma Aparatı
Advanced Extender, Camera2 API'ye dayalı bir tedarikçi firma uygulaması türüdür.
Bu Uzatma türü extensions-interface
1.2.0 sürümünde eklendi. Şuna bağlı olarak:
cihaz üreticisi, uzantılar uygulama katmanında uygulanmış olabilir,
Bu, şu faktörlere bağlıdır:
Özel yayın yapılandırması: RAW akışı gibi özel akışları yapılandırın veya farklı fiziksel kamera kimlikleri için birden fazla canlı yayın yapabilirsiniz.
Kamera2 istekleri gönderme özelliği: Karmaşık etkileşimleri destekleme şunun sonuçlarına göre parametrelerle yakalama istekleri gönderebilen mantıksal olması gerekir.
Advanced Extender bir sarmalayıcı veya ara katman sağlar. Böylece şunları yapabilirsiniz: Akış yapılandırmasını özelleştirme ve isteğe bağlı yakalama istekleri gönderme.
Uygulanacak dosyalar
Advanced Extender uygulamasına geçmek için
isAdvancedExtenderImplemented()
yöntemi
ExtensionVersionImpl
sonucu true
döndürülmelidir. OEM'ler, her uzantı türü için
ilgili Uzatma sınıflarına göz atın. Advanced Extender uygulama dosyaları,
gelişmiş pakette mevcuttur.
Uygulanacak sınıfları genişlet | |
---|---|
Gece | advanced/NightAdvancedExtenderImpl.java
|
HDR | advanced/HdrAdvancedExtenderImpl.java
|
Otomotiv | advanced/AutoAdvancedExtenderImpl.java
|
Boke | advanced/BokehAdvancedExtenderImpl.java
|
Yüz rötuşu | advanced/BeautyAdvancedExtenderImpl.java
|
Aşağıdaki örnekte yer tutucu olarak AdvancedExtenderImpl
kullanılmıştır.
Bu dosyayı, kullandığınız uzantının Extender dosyasının adıyla değiştirin.
üzerine konuşacağız.
Kamera2/X'in, üçünü sağlamak için extensions-interface
öğesini nasıl çağırdığına bakalım
her şeyi kapsamaktadır.
Uygulama akışı 1: Uzantıların kullanılabilirliğini kontrol etme
8. Şekil. Advanced Extender'da uygulama akışı 1
Öncelikle, uygulama belirtilen uzantının desteklenip desteklenmediğini kontrol eder.
Uygulama akışı 2: Sorgu bilgileri
9. Şekil. Advanced Extender'da uygulama akışı 2
AdvancedExtenderImpl.init()
çağrıldıktan sonra uygulama
AdvancedExtenderImpl
adresindeki bilgilere göre:
Tahmini henüz yakalama gecikmesi:
AdvancedExtenderImpl.getEstimatedCaptureLatencyRange()
, şu aralığı döndürür: uygulamanın işleme alınmasının uygun olup olmadığını değerlendirmesi için uzantıyı geçerli senaryo için etkinleştirin.Önizleme ve görüntü yakalama için desteklenen çözünürlükler:
AdvancedExtenderImpl.getSupportedPreviewOutputResolutions()
bir harita döndürür önizleme yüzeyi biçimi için desteklenen boyut listesine resim biçiminin seçin. OEM'ler en azPRIVATE
biçimini desteklemelidir.AdvancedExtenderImpl.getSupportedCaptureOutputResolutions()
şunu döndürür: desteklenen biçim ve boyutları kontrol edin. OEM'ler her ikisini de desteklemelidirJPEG
veYUV_420_888
biçiminde çıkış.AdvancedExtenderImpl.getSupportedYuvAnalysisResolutions()
şunu döndürür: resim analizinde ekstraYUV_420_888
akışı için desteklenen boyutları kullanın. Öğe görüntü analizi YUV yüzeyi desteklenmiyor.getSupportedYuvAnalysisResolutions()
,null
veya boş bir liste döndürmelidir.
Kullanılabilir yakalama isteği anahtarları/sonuçları (
extensions-interface
1.3.0'da eklenmiştir): Camera2/X, desteklenen yakalamayı almak için aşağıdaki yöntemleri çağırır uygulamanızdan anahtarları ve sonuç anahtarlarını isteyin:AdvancedExtenderImpl.getAvailableCaptureRequestKeys
AdvancedExtenderImpl.getAvailableCaptureResultKeys
Daha fazla bilgi için bkz. Yakalama isteği anahtarlarını ve sonuçlarını destekleyin.
Uygulama akışı 3: Uzantı etkin durumdayken önizleme/yine yakalama
Şekil 10. Advanced Extender'da uygulama akışı 3
Yukarıdaki şemada, önizlemeyi başlatmak için ana akış ve izleme sırasında Gelişmiş Uzatma Türü'dür. Her bir adımı inceleyelim.
SessionProcessorImpl
örnekTemel Advanced Extender uygulaması
SessionProcessorImpl
içindedir. özelleştirilmiş oturum yapılandırması sağlamaktan ve Önizlemeyi başlatmak ve isteği yakalamaya devam etmek için istekleri yakalama.AdvancedExtenderImpl.createSessionProcessor()
,SessionProcessorImpl
örneği.initSession
SessionProcessorImpl.initSession()
, uzantı için oturumu başlatır. Bu aşamada kaynakları ayırabilir veCameraCaptureSession
hazırlanıyor.Giriş parametreleri için Camera2/X, çıkış yüzeyi yapılandırmalarını belirtir önizleme, yine de yakalama ve isteğe bağlı YUV görüntüsü analizi için kullanılabilir. Bu çıkış yüzey yapılandırması (
OutputSurfaceImpl
) yüzey, boyut ve görüntüyü içerir biçimi (AdvancedExtenderImpl
içinde aşağıdaki yöntemlerle alınır):getSupportedPreviewOutputResolutions()
getSupportedCaptureOutputResolutions()
getSupportedYuvAnalysisResolutions()
Şunları içeren bir
Camera2SessionConfigImpl
örneği döndürmeniz gerekir:Camera2OutputConfigImpl
örneğin ve kullanılan oturum parametrelerinin listesiCameraCaptureSession
yapılandırması için. Sizin sorumluluğunuz Çıkış yüzeylerine doğru kamera görüntülerini çıkarırken Kamera2/X Çıkışı etkinleştirmek için kullanabileceğiniz bazı seçenekler şunlardır:- Kamera HAL'sinde işleme: Çıkış yüzeylerini doğrudan ekleyebilirsiniz.
SurfaceOutputConfigImpl
ileCameraCaptureSession
konumuna hakkında bilgi edindiniz. Bu işlem, kameraya sağlanan çıkış yüzeyini yapılandırır. kamera HAL'sinin resmi işlemesine olanak tanır. Ara
ImageReader
yüzeyi işleniyor (RAW, YUV vb.): Şunu ekleyin:CameraCaptureSession
için orta seviyeImageReader
ImageReaderOutputConfigImpl
örneği.Aradaki resimleri işlemeniz ve sonuç görüntüsünü çıkış yüzeyini gösteriyor.
- Kamera2 yüzey paylaşımını kullanma: Yüzey paylaşımını başka bir yüzeyle kullanma
herhangi bir
Camera2OutputConfigImpl
örneğini Başka bir tanesiningetSurfaceSharingOutputConfigs()
yöntemiCamera2OutputConfigImpl
örneği. Yüzey biçimi ve boyutu aynı olmalıdır.
SurfaceOutputConfigImpl
ve dahil tümCamera2OutputConfigImpl
ImageReaderOutputConfigImpl
, benzersiz bir kimliğe (getId()
) sahip olmalıdır: hedef yüzeyi belirtmek ve resmi şuradan almak için kullanılır:ImageReaderOutputConfigImpl
.onCaptureSessionStart
veRequestProcessorImpl
CameraCaptureSession
başladığında ve Kamera çerçevesi çağırdığındaonConfigured()
, ardından Camera2/X çağrısı Kamera2 isteği ileSessionProcessorImpl.onCaptureSessionStart()
sarmalayıcıRequestProcessImpl
. Camera2/X,RequestProcessImpl
özelliğini uygular, Bu, yakalama isteklerini yürütmenizi veImageReaderOutputConfigImpl
kullanılıyorsa resimleri alın.RequestProcessImpl
API'leri Camera2'ye benzer İsteklerin yürütülmesi açısındanCameraCaptureSession
API. Farklar şunlardır:- Hedef yüzey,
Camera2OutputConfigImpl
örneği. ImageReader
görüntüsünü alma özelliği.
RequestProcessorImpl.setImageProcessor()
öğesini belirli birImageProcessorImpl
örneğinin kaydedileceğiCamera2OutputConfigImpl
kimliği resim alır.Camera2/X çağrılarından sonra
RequestProcessImpl
örneği geçersiz hale gelirSessionProcessorImpl.onCaptureSessionEnd()
.- Hedef yüzey,
Önizlemeyi başlatma ve fotoğraf çekme
Advanced Extender uygulamasında yakalama istekleri gönderebilirsiniz.
RequestProcessorImpl
arayüzü üzerinden. Camera2/X size şunu bildirir: tekrarlayan önizleme isteğini veya görüntü yakalama sırasını başlatabilirsiniz.SessionProcessorImpl#startRepeating
aranıyor ve SırasıylaSessionProcessorImpl#startCapture
. Yakalama göndermeniz gerekiyor isteklerini yerine getirmesi gerekir.Camera2/X, yakalama isteği parametrelerini de
SessionProcessorImpl#setParameters
Bu istek parametrelerini ayarlamanız gerekir (parametreler destekleniyorsa) hem yinelenen hem de tekli isteklerde.En az
CaptureRequest.JPEG_ORIENTATION
veCaptureRequest.JPEG_QUALITY
.extensions-interface
1.3.0, isteği destekler ve sonuç anahtarlarını görebilirsiniz:AdvancedExtenderImpl.getAvailableCaptureRequestKeys()
AdvancedExtenderImpl.getAvailableCaptureResultKeys()
Geliştiriciler
getAvailableCaptureRequestKeys
listesindeki anahtarları ayarladığında parametreleri etkinleştirmeniz ve yakalamanın sonuç,getAvailableCaptureResultKeys
listesindeki anahtarları içerir.startTrigger
SessionProcessorImpl.startTrigger()
, tetikleyiciyi şu şekilde başlatmak için çağrılır:CaptureRequest.CONTROL_AF_TRIGGER
veCaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER
. Göz ardı edebilirsiniz. reklamı yapılmayan istek anahtarlarını yakalamaAdvancedExtenderImpl.getAvailableCaptureRequestKeys()
startTrigger()
,extensions-interface
1.3.0 sürümünden itibaren destekleniyor. Google uygulamaların dokunarak odaklamayı ve uzantıları olan flaş özelliğini kullanmasını sağlar.Temizlik
Yakalama oturumunu sonlandırdığınızda
SessionProcessorImpl.onCaptureSessionEnd()
, kapanıştan önce çağrılırCameraCaptureSession
. Yakalama oturumu kapatıldıktan sonra TemizliğideInitSession()
gerçekleştirir.
Önizleme, görüntü yakalama ve görüntü analizi desteği
Uzantıyı hem önizleme için uygulamanız hem de kullanım alanlarını yakalamanız gerekir. Ancak gecikme, önizlemenin sorunsuz bir şekilde gösterilmesi için çok yüksekse yalnızca fotoğraf çekme işlemi için uygulayın.
Temel Genişletici türünde uzantıyı önizleme için etkinleştirmeye bakılmaksızın,
hem ImageCaptureExtenderImpl
hem de PreviewExtenderImpl
uygulamanız gerekir
kullanabilirsiniz. Uygulamalar genellikle YUV akışını kullanarak
QR kodu veya metin bulma gibi resim içeriklerine yer verir. Bu kullanım alanını daha iyi desteklemek için
için önizleme, fotoğraf çekme ve video izleme özelliklerinin
CameraCaptureSession
yapılandırması için YUV_420_888
akış. Bunun anlamı şudur:
işleyen bir süreç olursa akışı desteklemeniz
YUV_420_888
akış.
Gelişmiş Genişletici'de Camera2/X, üç çıkış yüzeyini
SessionProcessorImpl.initSession()
arama. Bu çıkış yüzeyleri önizleme içindir
sırasıyla fotoğraf çekme ve görüntü analizi. Önizlemenin
çıkış yüzeylerinde geçerli çıkışı gösterir. Ancak resim için
analiz çıktı yüzeyini kullanıyorsanız, yalnızca null olmayan durumlarda çalıştığından emin olun. Eğer
uygulama resim analiz akışını desteklemiyorsa, bir resim analiz akışı
AdvancedExtenderImpl.getSupportedYuvAnalysisResolutions()
konumundaki liste. Bu
resim analizi çıkış yüzeyinin her zaman boş kalmasını sağlar:
SessionProcessorImpl.initSession()
Video çekimini destekleyin
Mevcut Kamera Uzantısı mimarisi yalnızca önizlemeyi ve aynı anda
örnek olarak verilebilir. MediaCodec
üzerinde uzantının etkinleştirilmesi desteklenmiyor
veya videoyu kaydetmek için MediaRecorder
yüzey. Ancak bazı durumlarda
önizleme çıkışını kaydetmesine olanak tanır.
MediaCodec
ve MediaRecorder
yüzeylerinin desteklenmesi inceleniyor.
Uzantıya özel meta veriler
Android 14 ve sonraki sürümler için uzantıya özel meta veriler
Kamera uzantısı istemcilerinin uzantıya özel çekim yapıp almasını sağlar
ve sonuçları kontrol edebilirsiniz. Özellikle, kamera uzantısı
istemciler, kontrol etmek için EXTENSION_STRENGTH
yakalama isteği parametresini kullanabilir
uzantı gücünü ve EXTENSION_CURRENT_TYPE
yakalama sonucunu
etkin uzantı türünü belirtir.
Yakalama istekleri
İlgili içeriği oluşturmak için kullanılan
EXTENSION_STRENGTH
yakalama isteği parametresini
uzantının işleme sonrası etkisinin gücünü kontrol eder. İlgili
yakalama sonucu, bu parametre ayarlanmazsa varsayılan güç değerini içerir
tarafından işleme konulacaktır. Bu parametre aşağıdaki gibi uygulanabilir
uzantı türleri:
BOKEH
: Bulanıklaştırma miktarını kontrol eder.HDR
veNIGHT
: Çok kaynaklı resim miktarını ve son bir resimdir.FACE_RETOUCH
: Kozmetik iyileştirme ve cilt miktarını kontrol eder yumuşatma.
EXTENSION_STRENGTH
parametresi için desteklenen aralık 0
ile arasındadır
100
, 0
uzantı işleme olmadığını veya basit geçiş olmadığını gösteriyor ve
İşleme etkisinin maksimum uzantı gücünü belirten 100
.
EXTENSION_STRENGTH
için destek eklemek üzere tedarikçi firmayı kullanın
uzantı kitaplığının 1.3.0 sürümünde kullanıma sunulan belirli parametre API'leri
kullanır. Daha fazla bilgi için bkz.
getAvailableCaptureRequestKeys()
.
Sonuçları yakala
İlgili içeriği oluşturmak için kullanılan
EXTENSION_CURRENT_TYPE
yakalama sonucu, uzantı uygulamalarının müşterilere etkin uzantı hakkında
uzantı türü.
AUTO
türünü kullanan uzantılar, uzantılar arasında dinamik olarak geçiş yaptığından
sahne koşullarına bağlı olarak HDR
ve NIGHT
gibi türler ve kamera
uzantılar uygulamaları aşağıdaki bilgileri görüntülemek için EXTENSION_CURRENT_TYPE
kullanabilir:
AUTO
uzantısı tarafından seçilen mevcut uzantı.
Gerçek zamanlı yine de yakalama gecikme tahmini
Android 14 ve sonraki sürümler için kamera uzantısı istemcileri
gerçek zamanlı sorgu gönderebilen ve yine de sahneye göre gecikme tahminlerini yakalayabilir
çevre koşullarını karşılamak için
getRealtimeStillCaptureLatency()
. Bu
yöntemi, statik yönteme kıyasla daha doğru tahminler sunar.
getEstimatedCaptureLatencyRangeMillis()
yöntemidir. Gecikme tahminine dayalı olarak uygulamalar, süreyi atlamaya karar verebilir
veya kullanıcılara uzun bir süre hakkında bilgi vermeye
gösteren bir tekniktir.
CameraExtensionSession.StillCaptureLatency latency;
latency = extensionSession.getRealtimeStillCaptureLatency();
// The capture latency from ExtensionCaptureCallback#onCaptureStarted() until ExtensionCaptureCallback#onCaptureProcessStarted().
latency.getCaptureLatency();
// The processing latency from ExtensionCaptureCallback#onCaptureProcessStarted() until the processed frame returns to the client.
latency.getProcessingLatency();
Yine de gecikme tahminlerini gerçek zamanlı olarak yakalamak için şu:
- Temel uzantılar:
ImageCaptureExtenderImpl.getRealtimeCaptureLatency()
- Gelişmiş uzantılar:
SessionProcessorImpl.getRealtimeCaptureLatency
İşleme ilerlemesine ait geri çağırmaları yakala
Android 14 ve sonraki sürümler için kamera uzantısı istemcileri uzun süre devam eden yakalama işleminin ilerlemesi için geri çağırma alabilir anlamına gelir. Uygulamalar, kullanıcılara yardımcı oluyor.
Uygulamalar bu özelliği entegre etmek için aşağıdaki kodu kullanabilir:
import android.hardware.camera2.CameraExtensionSession.
ExtensionCaptureCallback;
{
…
class AppCallbackImpl extends ExtensionCaptureCallback {
…
@Override
public void onCaptureProcessProgressed(
@NonNull CameraExtensionSession session,
@NonNull CaptureRequest request,
@IntRange(from = 0, to = 100) int progress) {
// Update app UI with current progress
}
}
…
}
Yakalama işleme ilerlemesi geri çağırmalarının desteklenmesi için uzantı tedarikçiniz uygulama, mevcut ilerleme durumuyla birlikte aşağıdaki geri çağırmaları çağırmalıdır değer:
- Temel uzantılar:
ProcessResultImpl.onCaptureProcessProgressed()
- Gelişmiş uzantılar:
CaptureCallback.onCaptureProcessProgressed()
Görüntüleme sonrası görüntü yakalama devam ediyor
Android 14 ve sonraki sürümlerde kamera uzantıları
aşağıdakileri kullanarak bir yayın sonrası (önizleme resmi) sağlayın:
setPostviewOutputConfiguration
.
Uygulamalar, kullanıcı deneyimini iyileştirmek için görüntüleme sonrası resmi
bir uzantı işleme gecikmesinde artış yaşıyorsa yer tutucusu
ve son resim hazır olduğunda resmi değiştirin. Uygulamalar yapılandırabilir
ve aşağıdaki referans kodunu kullanarak görüntüleme sonrası yakalama isteği gönderin:
{
…
if (!CameraExtensionCharacteristics.isPostviewAvailable()) {
continue;
}
…
ExtensionSessionConfiguration extensionConfiguration = new
ExtensionSessionConfiguration(
CameraExtensionCharacteristics.EXTENSION_NIGHT,
outputConfig,
backgroundExecutor,
extensionSessionStateCallback
);
extensionConfiguration.setPostviewOutputConfiguration(
postviewImageOutput);
…
CaptureRequest.Builder captureRequestBuilder =
cameraDevice.createCaptureRequest(
CameraDevice.TEMPLATE_STILL_CAPTURE);
captureRequestBuilder.addTarget(stillImageReader.getSurface());
captureRequestBuilder.addTarget(postviewImageSurface);
CaptureRequest captureRequest = captureRequestBuilder.build();
…
}
Görüntüleme sonrası görüntü yakalamayı desteklemek için tedarikçi uygulamanızın takip etmek için:
Temel uzantılar:
CaptureProcessorImpl.onPostviewOutputSurface
veCaptureProcessorImpl.processWithPostview
Gelişmiş uzantılar:
SessionProcessorImpl.startCaptureWithPostview
SurfaceView çıkışı desteği
Android 14 ve sonraki sürümler için kamera uzantısı istemcileri
kullanarak güç ve performans açısından optimize edilmiş önizleme oluşturma yollarını kullanabilir.
SurfaceView
tekrarlayan istekler için önizleme çıkışı örneği.
SurfaceView
çıkışını desteklemek için tedarikçi firma uzantısı uygulamanız
SurfaceView
örneğe akışla önizleme yapabilir ve önizleme çıkışı yapabilir. Alıcı:
bunun desteklendiğini doğrulayın, SurfaceViewExtensionPreviewTest.java
çalıştırın
CTS modülü.
Tedarikçi firmaya özel oturum türleri
Bu özellik, varsayılan değer yerine dahili kamera çekimi oturumunda ayarlanacak tedarikçi firmaya özel bir oturum türü seçmek için tedarikçi firma uzantısı uygulamalarını etkinleştirir.
Bu özellik tamamen çerçeve ve tedarikçi yığını içinde çalışır ve istemci/herkese açık API etkisine sahip değildir.
Tedarikçi firmaya özel bir oturum türü seçmek için uzantı kitaplıklarınız için aşağıdakileri uygulayın:
* Temel uzantılar için ExtenderStateListener.onSessionType()
* Gelişmiş uzantılar için Camera2SessionConfigImpl.getSessionType()
Uzantıların arayüzü sürüm geçmişi
Aşağıdaki tabloda, Kamera Uzantısı arayüzü sürüm geçmişi gösterilmektedir. Siz tedarikçi kitaplığını her zaman en son sürümde uygulamalısınız.
Sürüm | Ek özellikler |
---|---|
1.0.0 |
|
1.1.0 |
|
1.2.0 |
|
1.3.0 |
|
1.4.0 |
|
Referans uygulaması
Aşağıdaki referans OEM tedarikçi kitaplığı uygulamalarını
frameworks/ex
.
advancedSample
: Advanced Extender'ın temel bir uygulaması.sample
: Temel Genişletici'nin temel bir uygulaması.service_based_sample
: Barındırmayı gösteren bir uygulama Kamera UzantılarıService
Bu uygulama aşağıdaki bileşenleri içerir:oem_library
: Camera2 ve CameraX Uzantıları API'leri için Kamera Uzantıları OEM kitaplığıExtensions-Interface
uygulayan bir dizindir. Bu yöntem, kullanıcının aramalarıExtensions-Interface
kaynağından hizmete yönlendirir. Bu kitaplık ile iletişim kurmak için AIDL dosyaları ve sarmalayıcı sınıfları geliştirmenizi sağlar.Advanced Extender varsayılan olarak etkindir. Temel Genişletici'yi etkinleştirmek için:
ExtensionsVersionImpl#isAdvancedExtenderImplemented
değerini, döndürülecek şekilde değiştirinfalse
.extensions_service
: Uzantı Hizmeti'nin örnek bir uygulaması. Uygulamanızı ekleyin burayı tıklayın. Hizmette kullanılacak arayüz benzerdir Şuraya:Extensions-Interface
. Örneğin,IAdvancedExtenderImpl.Stub
aşağıdakilerle aynı işlemleri gerçekleştirir:AdvancedExtenderImpl
.ImageWrapper
veTotalCaptureResultWrapper
Image
veTotalCaptureResult
öğelerini ayrıştırılabilir hale getirmek için gereklidir.
Bir cihazda satıcı kitaplığını ayarlama
OEM tedarikçi kitaplığı, bir uygulamada yerleşik olarak bulunmaz; Cihazdan yüklendi
kamera2/X ile çalışma zamanında doğru şekilde ilerliyor. CameraX'te <uses-library>
etiketi,
tanımlanan androidx.camera.extensions.impl
kitaplığının
AndroidManifest.xml
dosyası, CameraX'in bir bağımlılığıdır vecamera-extensions
çalışma zamanında yüklendi. Kamera2'de çerçeve, uygulamanızın
<uses-library>
öğesinin aynı şekilde yüklendiğini de
Çalışma zamanında androidx.camera.extensions.impl
kitaplığı.
Bu seçenek, uzantı kullanan üçüncü taraf uygulamalarının OEM'yi otomatik olarak yüklemesine olanak tanır. yardımcı olur. Uygulamaların cihazlarda çalışabilmesi için OEM kitaplığı isteğe bağlı olarak işaretlendi bu uygulamaları kullanabilirsiniz. Bir uygulama kamera kullanmaya çalıştığında Camera2/X bu davranışı otomatik olarak uygular (cihaz üreticisinin OEM kitaplığını cihaza yerleştirdiği sürece) böylece uygulama tarafından keşfedilebilir.
Bir cihazda OEM kitaplığını oluşturmak için aşağıdakileri yapın:
<uses-library>
etiketinin gerektirdiği izin dosyasını ekleyin ve şu biçimi kullanarak:/etc/permissions/ANY_FILENAME.xml
. Örneğin, örnek,/etc/permissions/camera_extensions.xml
. Bu klasördeki dosyalar dizini,<uses-library>
dizininde adlandırılmış kitaplığın cihazdaki gerçek dosya yolunu gösterir.Dosyaya gerekli bilgileri eklemek için aşağıdaki örneği kullanın.
name
,androidx.camera.extensions.impl
olmalıdır kameraX'ın aradığı kitaplığa kavuşun.file
, uzantıları uygulama (örneğin,/system/framework/androidx.camera.extensions.impl.jar
) tıklayın.
<?xml version="1.0" encoding="utf-8"?> <permissions> <library name="androidx.camera.extensions.impl" file="OEM_IMPLEMENTED_JAR" /> </permissions>
Android 12 veya sonraki sürümleri çalıştıran CameraX'i destekleyen cihazlar
uzantıların ro.camerax.extensions.enabled
özelliği true
,
Böylece cihazın uzantıları destekleyip desteklemediğini sorgulayabilirsiniz.
Bunu yapmak için cihaz oluşturma dosyasına aşağıdaki satırı ekleyin:
PRODUCT_VENDOR_PROPERTIES += \
ro.camerax.extensions.enabled=true \
Doğrulama
OEM tedarikçi kitaplığını kullanımınızı test etmek için
geliştirme aşamasında kullanmak için
androidx-main/camera/integration-tests/extensionstestapp/
çeşitli tedarikçi firma uzantılarından
geçen bir test aracıdır.
Uygulamanızı tamamladıktan sonra, kamera uzantıları doğrulama aracı otomatik ve manuel testler çalıştırarak tedarikçi kitaplığının test edebilirsiniz.
Genişletilmiş sahne modu ile kamera uzantılarının karşılaştırması
Bokeh uzantısı için, uzantıyı kamera uzantısı kullanarak pozlamanın yanı sıra,
genişletilmiş sahne modunu kullanarak uzantıyı pozlayabilir.
"the"
CONTROL_EXTENDED_SCENE_MODE
tuşuna basın.
Uygulamayla ilgili daha fazla ayrıntı için Kamera bokeh'si başlıklı makaleye bakın.
Genişletilmiş sahne modunun, şunun kamera uzantılarına kıyasla daha az kısıtlaması vardır:
Camera2 uygulamaları. Örneğin, genişletilmiş sahne modunu şurada etkinleştirebilirsiniz:
Esnek akışı destekleyen normal bir CameraCaptureSession
örneği
istek parametrelerini yakalamamıza ve yakalamanıza olanak tanır. Öte yandan kamera uzantıları
yalnızca sabit bir akış türü grubunu destekler ve yakalama desteği sınırlıdır
istek parametreleridir.
Genişletilmiş sahne modunun olumsuz tarafı, bunu yalnızca sahneye Yani kamera HAL'si, yani tüm kameralarda çalışması için uygulama geliştiricilerin kullanımına sunulan dikey kontroller.
Hem genişletilmiş sahne modunu hem de Kamera'yı kullanarak bokeh pozlamanızı öneririz Uygulamaların bokeh'i etkinleştirmek için belirli bir API kullanmayı tercih edebileceği için uzantılar. Genişletilmiş sahne modunun en yaygını olduğu için önce genişletilmiş sahne modunu kullanmanızı öneririz. uygulamaların bokeh uzantısını etkinleştirmesi için esnek bir yol sunuyor. Daha sonra kamera uzantıları arayüzü genişletilmiş sahne moduna göre değişir. Uygulama kamera HAL'sinde bokeh resimler, örneğin yayın gerektirmesi nedeniyle zordur. işlemci olarak çalıştırıyorsanız, uygulama katmanını bokeh uzantısını kullanabilirsiniz.
Sık sorulan sorular (SSS)
API düzeylerinde herhangi bir kısıtlama var mı?
Evet. Bu durum, OEM tarafından gerekli kılınan Android API özellik grubuna bağlıdır
yardımcı olur. Örneğin,
ExtenderStateListener.onPresetSession()
,
SessionConfiguration.setSessionParameters()
çağrısına ihtiyacınız olacaktır. Bu çağrı yalnızca API düzeyinde kullanılabilir
28 yaş ve üzeri. Belirli arayüz yöntemleriyle ilgili ayrıntılar için
API referans belgeleri.