Akış Yapılandırmaları

Android 10, kamera istemcilerinin belirli kullanım durumları için en uygun kamera akışlarını seçmesine ve belirli akış kombinasyonlarının kamera cihazı tarafından desteklenmesine olanak tanıyan özellikler sunar. Akış yapılandırması, kamera cihazında yapılandırılan tek bir kamera akışını ve akış kombinasyonu , kamera cihazında yapılandırılan bir veya daha fazla akış grubunu ifade eder. Bu özellikler hakkında daha fazla bilgi için önerilen akış yapılandırmalarına ve akış kombinasyonlarını sorgulamak için API'ye bakın.

Referans uygulaması

Akış kombinasyonu özelliklerini sorgulamak için önerilen yapılandırma akışlarının ve API'nin satıcı tarafında bir başvuru uygulaması vardır. Bu uygulamayı QCamera3HWI.cpp adresinde bulabilirsiniz.

Kamera satıcıları, kamera istemcilerine belirli kullanım durumları için önerilen akış yapılandırmalarının reklamını yapabilir. StreamConfigurationMap'in alt kümeleri olan bu önerilen akış yapılandırmaları, kamera istemcilerinin en uygun yapılandırmaları seçmesine yardımcı olabilir.

StreamConfigurationMap , kamera istemcilerine kapsamlı akış yapılandırma bilgisi sağlamasına rağmen, bir akışı diğerine tercih etmenin verimlilik, güç veya performans üzerindeki etkileri hakkında herhangi bir bilgi sağlamaz. Kamera istemcileri tüm olası akış yapılandırmaları arasından özgürce seçim yapabilir, ancak çoğu durumda bu, istemcilerin optimal olmayan kamera yapılandırmaları kullanmasına ve uygulamaların zaman alıcı ayrıntılı aramalar yapmasına yol açar.

Örneğin, bazı işlenmiş YUV formatları gerekli ve desteklenmesi gerekmesine rağmen, kamera cihazının formatlar için yerel desteği olmayabilir. Bu, format dönüştürme için ek bir işlem geçişi sağlar ve verimliliği azaltır. Boyut ve karşılık gelen en boy oranı da benzer bir etkiye sahip olabilir ve belirli boyutları güç ve performans açısından tercih edilebilir hale getirebilir.

Önerilen akış yapılandırma haritalarınızın, StreamConfigurationMap ile karşılaştırıldığında ayrıntılı olması gerekmez. Önerilen yapılandırma haritaları, uygulama bölümündeki gereksinimleri karşılamalıdır ve StreamConfigurationMap içinde bulunan mevcut biçimlerin, boyutların veya diğer değerlerin herhangi birini içerebilir. StreamConfigurationMap'te bulunmayan gizli biçimler, boyutlar veya diğer değerler, önerilen akış yapılandırma haritalarına dahil edilemez.

Tüm testler değişmeden kalır ve önerilen akış yapılandırmalarına bağlı olarak gevşetilmez.

Kamera uygulaması tarafından sağlanan önerilen akış yapılandırmaları isteğe bağlıdır ve kamera istemcisi bunları yok sayabilir.

uygulama

Bu özelliği uygulamak için aşağıdaki adımları izleyin.

Meta veri girişleri

Bu özelliği etkinleştirmek için Camera HAL'nin aşağıdaki statik meta veri girişlerini doldurması gerekir:

  • android.scaler.availableRecommendedStreamConfigurations : Belirli kullanım durumları için önerilen akış yapılandırmaları alt kümesi. Bildirim, önerilen kullanım durumlarını [1 << PREVIEW | 1 << RECORD..] . Kullanım durumları, normal (biçim, genişlik, yükseklik, giriş) tanımlama grubunu bir ek girişle genişletir. Mevcut olmayan genel kullanım durumları veya [PUBLIC_END, VENDOR_START] aralığında ayarlanan diğer bitler yasaktır.

    Bu bilgiler availableRecommendedStreamConfigurations meta veri etiketinde saklanır.

    Aşağıdaki örnek, yalnızca 4K ve 1080p'yi destekleyen, video kaydı için her iki çözünürlüğün de tercih edildiği ancak önizleme için yalnızca 1080p'nin önerildiği bir kamera cihazı için önerilen akış yapılandırması için bir dizi gösterir.

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (yalnızca cihaz tarafından destekleniyorsa kullanılabilir): Bu kamera cihazı için önerilen önerilen derinlik veri alanı akışı yapılandırmaları. Yukarıdaki meta veri girişine benzer şekilde, ek bir kullanım durumu bit eşlemi, önerilen kullanım durumlarını gösterir.

    Bu bilgi, availableRecommendedInputOutputFormatsMap meta veri etiketinde saklanır.

  • android.scaler.availableRecommendedInputOutputFormatsMap (yalnızca cihaz tarafından destekleniyorsa kullanılabilir): Giriş akışları için bu kamera cihazı için önerilen önerilen görüntü formatlarının ilgili çıkış formatlarıyla eşlenmesi.

    Bu bilgiler availableRecommendedDepthStreamConfigurations meta veri etiketinde depolanır.

Bu bilgiler, RecommendedStreamConfigurationMap API aracılığıyla kamera istemcilerine sunulur.

Gerekli kullanım durumları

Aşağıdaki kullanım durumları için önerilen akış yapılandırmaları sağlanmalı ve ilgili gereksinimleri karşılamalıdır:

kullanım durumu Gereklilik
PREVIEW Bir önizleme, yalnızca YUV_420_888 ve IMPLEMENTATION_DEFINED gibi çıktı biçimlerine sahip, duraklatmayan işlenmiş akış yapılandırmalarını içermelidir.
RECORD Bir video kaydı, reklamı yapılan desteklenen medya profilleriyle IMPLEMENTATION_DEFINED biçimiyle eşleşen akış yapılandırmalarını içermelidir.
VIDEO_SNAPSHOT Bir video anlık görüntüsü, en az maksimum KAYIT çözünürlükleri kadar büyük olan ve yalnızca BLOB + DATASPACE_JFIF biçimi/veri alanı kombinasyonu (JPEG) olan akış yapılandırmalarını içermelidir. Yapılandırmalar önizleme hatalarına neden olmamalı ve 30 fps'de çalışabilmelidir.
SNAPSHOT Anlık görüntü akışı yapılandırmaları, BLOB + DATASPACE_JFIF biçim/veri alanı kombinasyonu (JPEG) ile android.sensor.info.activeArraySize yakın bir boyuta sahip en az bir tane içermelidir. En boy oranı, hizalama ve diğer satıcıya özel kısıtlamalar üzerindeki kısıtlamalar dikkate alındığında, önerilen maksimum boyutun alanı, sensör dizisi boyutu alanının %97'sinden az olmamalıdır.
ZSL (destekleniyorsa) Kamera cihazı tarafından destekleniyorsa, önerilen giriş akışı yapılandırmaları yalnızca diğer işlenmiş veya duraklayan çıktı biçimleriyle birlikte tanıtılmalıdır.
RAW (destekleniyorsa) Kamera cihazı tarafından destekleniyorsa, önerilen ham akış yapılandırmaları yalnızca RAW tabanlı çıktı biçimlerini içermelidir.

Diğer kullanım durumları

Uygulamanıza özel kullanım durumları için önerilen ek yapılandırma akışları sağlayabilirsiniz.

doğrulama

Önerilen yapılandırma akışlarını uygulamanızı test etmek için aşağıdaki CTS ve VTS testlerini çalıştırın:

Akış kombinasyonlarını sorgulamak için API

Android platformu, akış kombinasyonlarını sorgulamak için bir API'yi destekler. Bu API'yi uygulamak, kamera istemcilerinin geçerli bir CameraDevice örneği aldıktan sonra herhangi bir noktada akış kombinasyonlarını güvenli bir şekilde sorgulamasına, bir kamera yakalama oturumu başlatma ek yükünü ve kamera kırılması da dahil olmak üzere sonraki kamera istisnalarına sahip olma potansiyelini ortadan kaldırmasına ve daha hızlı sorgulara izin vermesine olanak tanır.

Bu özellik aynı zamanda kamera istemcilerinin CameraDevice yönergelerine ve desteklenen HW düzeyine göre derlenen akış kombinasyonlarının bir listesini almasına da olanak tanır. En yaygın akış kombinasyonlarının küçük bir alt kümesini kapsayan sorgu sonuçlarının doğruluğunu mümkün olduğunca zorlamak için CTS testleri mevcuttur.

Camera HAL'de bir ek HIDL API çağrısı uygulayarak bu özelliği desteklemeyi seçebilirsiniz.

uygulama

Akış kombinasyonlarını sorgulamak üzere bir API'yi desteklemek için, Camera isStreamCombinationSupported HIDL API arayüzü için bir uygulama sağlaması gerekir. Bu arayüz, kamera cihazının belirli bir kamera akışı kombinasyonunu destekleyip desteklemediğini kontrol eder.

Çağrıldığında, API aşağıdaki durum kodlarından birini döndürmelidir:

  • OK : Akış kombinasyonu sorgusu başarılı oldu.
  • METHOD_NOT_SUPPORTED : Kamera cihazı akış kombinasyonu sorgusunu desteklemiyor.
  • INTERNAL_ERROR : Dahili bir hata nedeniyle akış kombinasyonu sorgusu tamamlanamıyor.

Akış kombinasyonu destekleniyorsa API true değerini döndürür. Aksi takdirde false döndürür.

Çerçeve, belirli oturum yapılandırmasının kamera cihazı tarafından desteklenip desteklenmediğini kontrol etmek için genel API isSessionConfigurationSupported kullanır.

API'ye yapılan çağrıların normal kamera çalışması üzerinde herhangi bir yan etkisi olmamalıdır. API çağrıları herhangi bir dahili durumu değiştirmemeli veya kamera performansını yavaşlatmamalıdır. Camera HAL bir akış kombinasyonunu başarıyla doğruladıktan sonra, kamera istemcilerinin akış kombinasyonunu başarıyla yapılandırabildiğinden emin olun. Sorunlardan kaçınmak için uygulamanın akış birleştirme sorguları sırasında herhangi bir bilgi depolamadığından, dahili durumunu değiştirmediğinden veya zaman alan işlemlere girmediğinden emin olun.

doğrulama

Bu özelliği doğrulamak için aşağıdaki kamera CTS ve VTS test senaryolarını çalıştırın:

Kamera CTS modülleri:

Kamera VTS'si:

VtsHalCameraProviderV2_4TargetTest.cpp