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 desteklenmesini sağlamasına olanak tanıyan özellikler sunar. Bir akış konfigürasyonu, kamera cihazında yapılandırılmış tek bir kamera akışını ifade eder ve bir akış kombinasyonu, kamera cihazında yapılandırılmış bir veya daha fazla akış setini 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ı

Önerilen yapılandırma akışlarının satıcı tarafında referans uygulaması ve akış birleşimi özelliklerini sorgulamak için API mevcuttur. Bu uygulamayı QCamera3HWI.cpp adresinde bulabilirsiniz.

Kamera satıcıları, belirli kullanım durumları için önerilen akış yapılandırmalarını kamera istemcilerine tanıtabilir. 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 bilgileri sunsa da, bir akışı diğerine tercih etmenin verimliliği, gücü veya performans 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 optimumun altında kamera yapılandırmaları kullanmasına ve uygulamaların zaman alıcı, kapsamlı aramalar yapmasına yol açar.

Örneğin, bazı işlenmiş YUV formatlarının gerekli olmasına 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şine neden olur ve verimliliği azaltır. Boyut ve buna 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 kapsamlı olması gerekmez. Önerilen yapılandırma eşlemeleri, uygulama bölümündeki gereksinimlere uygun olmalıdır ve StreamConfigurationMap'te bulunan mevcut formatlardan, boyutlardan veya diğer değerlerden herhangi birini içermelidir. StreamConfigurationMap'te bulunmayan gizli formatlar, 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ı göz ardı edebilir.

Uygulama

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

Meta veri girişleri

Bu özelliği etkinleştirmek için Kamera 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ş) demetini 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 örnekte, yalnızca 4K ve 1080p'yi destekleyen bir kamera cihazı için önerilen akış yapılandırmasına yönelik bir dizi gösterilmektedir; burada video kaydı için her iki çözünürlük de tercih edilir ancak önizleme için yalnızca 1080p önerilir.

    [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ı belirtir.

    Bu bilgiler 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 karşılık gelen çıkış formatlarıyla eşleştirilmesi.

    Bu bilgiler availableRecommendedDepthStreamConfigurations meta veri etiketinde saklanır.

Bu bilgilere, SuggestStreamConfigurationMap API aracılığıyla kamera istemcileri erişebilir.

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 örneği Gereklilik
PREVIEW Bir önizleme yalnızca YUV_420_888 ve IMPLEMENTATION_DEFINED gibi çıkış biçimlerine sahip, durmayan 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 RECORD çözünürlükleri kadar büyük ve yalnızca BLOB + DATASPACE_JFIF format/veri alanı kombinasyonuna (JPEG) sahip akış yapılandırmalarını içermelidir. Yapılandırmalar önizleme hatalarına neden olmamalı ve 30 fps hızında çalışabilmelidir.
SNAPSHOT Anlık görüntü akışı yapılandırmaları, BLOB + DATASPACE_JFIF format/veri alanı kombinasyonuna (JPEG) sahip android.sensor.info.activeArraySize boyutuna yakın en az bir tane içermelidir. En boy oranı, hizalama ve satıcıya özgü diğer 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ının yalnızca diğer işlenmiş veya duraklayan çıkış formatlarıyla birlikte tanıtılması gerekir.
RAW (destekleniyorsa) Kamera cihazı tarafından destekleniyorsa önerilen ham akış yapılandırmaları yalnızca RAW tabanlı çıktı formatlarını 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ına ilişkin 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'nin uygulanması, kamera istemcilerinin geçerli bir CameraDevice örneğini aldıktan sonra herhangi bir noktada akış kombinasyonlarını güvenli bir şekilde sorgulamasına olanak tanır, bir kamera yakalama oturumunu başlatma yükünü ve kamera kırılması da dahil olmak üzere sonraki kamera istisnalarıyla karşılaşma potansiyelini ortadan kaldırır ve daha hızlı sorgulara izin verir.

Bu özellik ayrıca kamera istemcilerinin, CameraDevice yönergelerine ve desteklenen donanım düzeyine göre derlenmiş akış kombinasyonlarının bir listesini almasına da olanak tanır. En yaygın akış birleşimlerinin küçük bir alt kümesini kapsayan sorgu sonuçlarının doğruluğunu mümkün olduğunca sağlamak için CTS testleri mevcuttur.

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

Uygulama

Akış kombinasyonlarını sorgulamak amacıyla bir API'yi desteklemek için Kamera HAL'nin isStreamCombinationSupported HIDL API arayüzüne yönelik bir uygulama sağlaması gerekir. Bu arayüz, kamera cihazının belirli bir kamera akışı kombinasyonunu destekleyip desteklemediğini kontrol eder.

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

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

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

Çerçeve, belirli bir 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. Kamera HAL'nin 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şimi sorguları sırasında herhangi bir bilgi depolamadığından, dahili durumunu değiştirmediğinden veya zaman alıcı işlemlere girişmediğ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