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. Bir akış yapılandırma kamera cihazı olarak biçimlendirilmiş tek bir kamera akımı ifade eder ve bir akım kombinasyonu kamera cihazı yapılandırılmış akımların bir ya da daha çok kümesinin değinmektedir. Bu özellikler hakkında daha fazla bilgi için, bkz akışı yapılandırmaları tavsiye ve sorgu akışı kombinasyonlarına API .

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. Sen bu uygulamayı bulabilirsiniz QCamera3HWI.cpp

Kamera satıcıları, belirli kullanım durumları için önerilen akış yapılandırmalarını kamera istemcilerine ilan edebilir. Alt kümeleri olan bu tavsiye edilen akım yapılandırmaları, StreamConfigurationMap , kamera istemcileri optimum yapılandırmaları seçim yardımcı olabilir.

Her ne kadar StreamConfigurationMap kamera müşterilerine ayrıntılı akışı yapılandırma bilgilerini içerir, diğerinden üstün akışını seçmenin verimliliği, güç veya performans etkileri hakkında herhangi bir bilgi vermemektedir. 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 zaman alan kapsamlı aramalar yapan uygulamalara 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.

Sizin tavsiye edilen akış yapılandırma haritalar karşılaştırıldığında ayrıntılı olması gerekmez StreamConfigurationMap . Önerilen yapılandırma haritalar belirtilen gereksinimleri karşılamanız gerekmektedir uygulama bölümü ve bulunan mevcut formatlar büyüklüklere veya değerlerden herhangi birini içerebilir StreamConfigurationMap . 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 : özel kullanım durumları için akış konfigürasyonları önerilen alt takımı. Beyan formunda önerilen kullanım durumları gösteren basit bir bit eşlem kullanır [1 << PREVIEW | 1 << RECORD..] . Kullanım durumları, normal (biçim, genişlik, yükseklik, giriş) tanımlama grubunu bir ek girişle genişletir. Kamu kullanım durumları veya aralık içinde yer alan başka bir bit Sigara mevcut [PUBLIC_END, VENDOR_START] yasaklanmıştır.

    Bu bilgiler saklanır availableRecommendedStreamConfigurations meta etiketi.

    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 (cihaz tarafından destekleniyorsa kullanılabilir): Bu kamera cihazı için önerilen önerilen derinlik DataSpace akışı konfigürasyonları. Yukarıdaki meta veri girişine benzer şekilde, ek bir kullanım durumu bit eşlemi, önerilen kullanım durumlarını gösterir.

    Bu bilgiler saklanır availableRecommendedInputOutputFormatsMap meta etiketi.

  • android.scaler.availableRecommendedInputOutputFormatsMap (cihaz tarafından destekleniyorsa kullanılabilir): bunlara karşılık gelen çıkış biçimleri, giriş akışları için bu kamera cihazı için önerilmektedir tavsiye edilen görüntü formatları haritalama.

    Bu bilgiler saklanır availableRecommendedDepthStreamConfigurations meta etiketi.

Bu bilgiler sayesinde kamera müşterilerine kullanılabilir RecommendedStreamConfigurationMap API.

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 Önizleme, yalnızca gibi çıktı biçimleriyle işleme akımı yapılandırmaları olmayan bayılma içerir YUV_420_888 ve IMPLEMENTATION_DEFINED .
RECORD Bir video kayıt reklamı Desteklenen ortam eşleşen akış yapılandırmaları içermelidir profilleri ile IMPLEMENTATION_DEFINED biçimi.
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 akış yapılandırmaları için bir boyut yakın olan en az bir tane içermelidir android.sensor.info.activeArraySize BLOB + DATASPACE_JFIF biçimiyle / DataSpace kombinasyonu (JPEG). 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 bildirilmelidir.
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 uygulanması geçerli aldıktan sonra herhangi bir noktada güvenle sorgu akışı kombinasyonlarına kamera müşterilerine veriyor CameraDevice , örneğini bir kamera yakalama oturumu ve kamera kırılması dahil müteakip kamera istisnaları sahip potansiyeline başlatılıyor yükü kaldırma ve daha hızlı sorgular için izin.

Bu özellik aynı zamanda kamera istemcileri göre derlenen dere kombinasyonların listesini almanızı sağlar kılavuzlar CameraDevice için ve desteklenen HW düzeyde. 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 ek bir HIDL API çağrısı uygulayarak bu özelliği desteklemeyi seçebilirsiniz.

uygulama

Sorgu akışı kombinasyonlarına bir API desteklemek için, Kamera HAL için bir uygulama sağlaması gerekir isStreamCombinationSupported HIDL API arayüzü. 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 : akışı kombinasyonu sorgusu desteklemez kamera cihazı.
  • INTERNAL_ERROR : akışı kombinasyonu sorgu yapabilirsiniz dahili bir hata nedeniyle tamamlanamadı.

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

Çerçeve kamu API kullanır isSessionConfigurationSupported belirli bir oturum yapılandırma kamera cihaz tarafından desteklenip desteklenmediğini kontrol etmek.

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. Sorunları önlemek 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