Çoklu kamera desteği

Android 9, aynı yöne bakan iki veya daha fazla fiziksel kamera cihazından oluşan yeni bir mantıksal kamera cihazı aracılığıyla çoklu kameralı cihazlar için API desteğini kullanıma sundu. Mantıksal kamera cihazı, HAL entegre çok kameralı özelliklerle etkileşime izin veren bir uygulamaya tek bir CameraDevice/CaptureSession olarak gösterilir. Uygulamalar isteğe bağlı olarak temel fiziksel kamera akışlarına, meta verilere ve denetimlere erişebilir ve bunları kontrol edebilir.

Çoklu kamera desteği

Şekil 1. Çoklu kamera desteği

Bu şemada farklı kamera kimlikleri renk kodlarıyla gösterilmiştir. Uygulama, her fiziksel kameradan aynı anda ham arabellekleri aktarabilir. Farklı fiziksel kameralardan ayrı kontroller ayarlamak ve ayrı meta veriler almak da mümkündür.

Örnekler ve kaynaklar

Çok kameralı cihazların reklamı, mantıksal çok kameralı özellik ile yapılmalıdır.

Kamera istemcileri, getPhysicalCameraIds() çağrısını yaparak belirli bir mantıksal kameranın fiziksel cihazlarının kamera kimliğini sorgulayabilir. Sonuç kapsamında döndürülen kimlikler, setPhysicalCameraId() aracılığıyla fiziksel cihazları tek tek kontrol etmek için kullanılır. Bu tür bağımsız isteklerden elde edilen sonuçlar, getPhysicalCameraResults() çağrılarak tam sonuçtan sorgulanabilir.

Bağımsız fiziksel kamera istekleri yalnızca sınırlı sayıda parametreyi destekleyebilir. Geliştiriciler, desteklenen parametrelerin listesini almak için getAvailablePhysicalCameraRequestKeys() işlevini çağırabilir.

Fiziksel kamera akışları yalnızca yeniden işleme dışı istekler ve yalnızca tek renkli ve Bayer sensörler için desteklenir.

Uygulama

Destek yapılacaklar listesi

HAL tarafında mantıksal çok kameralı cihazlar eklemek için:

Android 9 çalıştıran cihazlarda kamera cihazları, bir mantıksal YUV/RAW akışının iki fiziksel kameradan gelen aynı boyut ve biçime sahip fiziksel akışlarla değiştirilmesini desteklemelidir (RAW akışları için geçerli değildir). Bu, Android 10 çalıştıran cihazlar için geçerli değildir.

Kamera HAL cihaz sürümünün 3.5 veya daha yeni olduğu Android 10 çalıştıran cihazlarda, uygulamaların fiziksel akışlar içeren belirli bir akış kombinasyonunun desteklenip desteklenmediğini sorgulayabilmesi için kamera cihazının isStreamCombinationSupported özelliğini desteklemesi gerekir.

Akış yapılandırma haritası

Mantıksal kameralarda, belirli bir donanım düzeyindeki kamera cihazı için zorunlu akış kombinasyonları CameraDevice.createCaptureSession'te gerekli olanla aynıdır. Akış yapılandırma haritasındaki tüm akışlar mantıksal akışlar olmalıdır.

Farklı boyutlarda fiziksel alt kameralarla RAW özelliğini destekleyen mantıksal bir kamera cihazında, bir uygulama mantıksal RAW akışı yapılandırırsa mantıksal kamera cihazı farklı sensör boyutlarına sahip fiziksel alt kameralara geçmemelidir. Bu sayede mevcut RAW yakalama uygulamaları çalışmamaya başlamaz.

RAW çekimi sırasında fiziksel alt kameralar arasında geçiş yaparak HAL tarafından uygulanan optik yakınlaştırmadan yararlanmak için uygulamaların mantıksal RAW akışı yerine fiziksel alt kamera akışlarını yapılandırması gerekir.

Garantili yayın kombinasyonu

Hem mantıksal kamera hem de temelindeki fiziksel kameralar, cihaz seviyeleri için gereken zorunlu akış kombinasyonlarını garanti etmelidir.

Mantıksal kamera cihazı, donanım düzeyine ve özelliklerine bağlı olarak fiziksel kamera cihazıyla aynı şekilde çalışmalıdır. Özellik grubunun, tek tek fiziksel kameraların özelliklerinin bir üst kümesi olması önerilir.

Android 9 çalıştıran cihazlarda, garanti edilen her akış kombinasyonu için mantıksal kamera aşağıdakileri desteklemelidir:

  • Boyut ve biçimin fiziksel kameralar tarafından desteklendiği varsayılarak, mantıksal YUV_420_888 veya ham bir akışı, her biri ayrı bir fiziksel kameradan gelen aynı boyut ve biçime sahip iki fiziksel akışla değiştirme.

  • Mantıksal kamera RAW özelliğini tanıtmıyorsa ancak temel fiziksel kameralar tanıtıyorsa her fiziksel kameradan bir tane olmak üzere iki ham akış ekleme. Bu durum genellikle fiziksel kameraların sensör boyutları farklı olduğunda ortaya çıkar.

  • Aynı boyut ve biçime sahip mantıksal bir akış yerine fiziksel akışlar kullanma Fiziksel ve mantıksal akışların minimum kare süresi aynı olduğunda bu, yakalamanın kare hızını yavaşlatmamalıdır.

Performans ve güçle ilgili dikkat edilmesi gereken noktalar

  • Performans:

    • Fiziksel akışları yapılandırma ve yayınlama, kaynak kısıtlamaları nedeniyle mantıksal kameranın yakalama hızını yavaşlatabilir.
    • Temel kameralar farklı kare hızlarına ayarlanırsa fiziksel kamera ayarlarının uygulanması, yakalama hızını yavaşlatabilir.
  • Güç:

    • HAL'ın güç optimizasyonu varsayılan durumda çalışmaya devam eder.
    • Fiziksel akışları yapılandırmak veya istemek, HAL'ın dahili güç optimizasyonunu geçersiz kılabilir ve daha fazla güç kullanımına neden olabilir.

Özelleştirme

Cihaz uygulamanızı aşağıdaki yöntemlerle özelleştirebilirsiniz.

  • Mantıksal kamera cihazının birleştirilmiş çıkışı tamamen HAL uygulamasına bağlıdır. Birleştirilmiş mantıksal akışların fiziksel kameralardan nasıl türetileceğine dair karar, uygulama ve Android kamera çerçevesi için şeffaftır.
  • Fiziksel istek ve sonuçlar isteğe bağlı olarak desteklenir. Bu tür isteklerde kullanılabilen parametre grubu da tamamen belirli HAL uygulamasına bağlıdır.
  • Android 10'dan itibaren HAL, getCameraIdList içinde PHYSICAL_ID'lerin bir kısmını veya tamamını reklamını yapmamayı seçerek bir uygulama tarafından doğrudan açılabilecek kameraların sayısını azaltabilir. getPhysicalCameraCharacteristics çağrısı yapıldığında fiziksel kameranın özellikleri döndürülmelidir.

Doğrulama

Mantıksal çok kameralı cihazlar, diğer normal kameralar gibi kamera CTS'sini geçmelidir. Bu tür cihazları hedefleyen test örneklerini LogicalCameraDeviceTest modülünde bulabilirsiniz.

Aşağıdaki üç ITS testi, görüntülerin doğru şekilde birleştirilmesini kolaylaştırmak için çok kameralı sistemleri hedefler:

1. ve 4. sahne testleri, kutu içinde ITS test aparatıyla çalıştırılır. test_multi_camera_match testi, her iki kamera da etkinleştirildiğinde resimlerin ortasının parlaklığının eşleştiğini doğrular. test_multi_camera_alignment testi, kamera aralıkları, yönleri ve bozulma parametrelerinin doğru şekilde yüklendiğini doğrular. Çok kameralı sistemde geniş görüş alanı kamerası (>90o) varsa ITS kutusunun rev2 sürümü gerekir.

Sensor_fusion, tekrarlanan, önceden belirlenmiş telefon hareketlerini sağlayan ve jiroskop ile görüntü sensörü zaman damgalarının eşleştiğini ve çok kameralı karelerin senkronize olduğunu doğrulayan ikinci bir test düzeneğidir.

Tüm kutular AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) ve MYWAY Manufacturing (www.myway.tw, sales@myway.tw) üzerinden temin edilebilir. Ayrıca, rev1 ITS kutusu West-Mark (www.west-mark.com, dgoodman@west-mark.com) üzerinden de satın alınabilir.

En iyi uygulamalar

Uygulama uyumluluğunu korurken çoklu kamera tarafından etkinleştirilen özelliklerden tam olarak yararlanmak için mantıksal çoklu kamera cihazı uygularken aşağıdaki en iyi uygulamalardan yararlanın:

  • (Android 10 veya sonraki sürümler) Fiziksel alt kameraları getCameraIdList'den gizleyin. Bu sayede, uygulamalar tarafından doğrudan açılabilen kameraların sayısı azalır ve uygulamaların karmaşık kamera seçim mantığına sahip olması gerekmez.
  • (Android 11 veya sonraki sürümler) Optik yakınlaştırmayı destekleyen mantıksal çok kameralı cihazlar için ANDROID_CONTROL_ZOOM_RATIO API'sini uygulayın ve yalnızca en boy oranı kırpma için ANDROID_SCALER_CROP_REGION'i kullanın. ANDROID_CONTROL_ZOOM_RATIO, cihazın uzaklaştırmasını ve daha hassas sonuçlar elde etmesini sağlar. Bu durumda HAL, yakınlaştırma sonrası görüş alanını sensör etkin dizisi olarak işlemek için ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES ve ANDROID_STATISTICS_FACE_LANDMARKS koordinat sistemini ayarlamalıdır. ANDROID_SCALER_CROP_REGION'un ANDROID_CONTROL_ZOOM_RATIO ile birlikte nasıl çalıştığı hakkında daha fazla bilgi için camera3_crop_reprocess#cropping başlıklı makaleyi inceleyin.
  • Farklı özelliklere sahip fiziksel kameralara sahip çok kameralı cihazlarda, cihazın yalnızca yakınlaştırma aralığının tamamı ilgili değeri veya aralığı destekliyorsa bir kontrol için belirli bir değer veya aralık desteğinin reklamını yaptığından emin olun. Örneğin, mantıksal kamera ultra geniş, geniş ve telefoto kameradan oluşuyorsa aşağıdakileri yapın:
    • Fiziksel kameraların etkin dizi boyutları farklıysa kamera HAL'i, ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS, ANDROID_STATISTICS_FACE_RECTANGLES ve ANDROID_STATISTICS_FACE_LANDMARKS için fiziksel kameraların etkin dizilerinden mantıksal kameranın etkin dizisine eşlemeyi yapmalıdır. Böylece, uygulama açısından koordinat sistemi mantıksal kameranın etkin dizi boyutu olur.
    • Geniş ve telefoto kameralar otomatik odaklamayı destekliyorsa ancak ultra geniş kamera sabit odaklamalıysa mantıksal kameranın otomatik odaklama desteğinin reklamını yaptığından emin olun. HAL, ultra geniş kamera için bir otomatik odaklama durum makinesi simüle etmelidir. Böylece, uygulama ultra geniş lensi yakınlaştırdığında temel fiziksel kameranın sabit odaklı olması uygulama için şeffaf olur ve desteklenen AF modları için otomatik odaklama durum makineleri beklendiği gibi çalışır.
    • Geniş ve telefoto kameralar 60 fps'de 4K'yı destekliyorsa ve ultra geniş kamera yalnızca 30 fps'de 4K'yı veya 60 fps'de 1080p'yi destekliyorsa ancak 60 fps'de 4K'yı desteklemiyorsa mantıksal kameranın desteklenen yayın yapılandırmalarında 60 fps'de 4K'yı reklam olarak göstermediğinden emin olun. Bu, mantıksal kamera özelliklerinin bütünlüğünü garanti ederek uygulamanın 1'den düşük bir ANDROID_CONTROL_ZOOM_RATIO değerinde 60 fps'de 4K'ya ulaşamama sorunuyla karşılaşmamasını sağlar.
  • Android 10'dan itibaren, fiziksel akışları içeren akış kombinasyonlarını desteklemek için mantıksal çoklu kamera gerekli değildir. HAL, fiziksel akışlarla kombinasyonu destekliyorsa:
    • (Android 11 veya sonraki sürümler) Stereodan derinlik ve hareket izleme gibi kullanım alanlarını daha iyi işlemek için fiziksel akış çıkışlarının görüş alanını donanım tarafından sağlanabilecek en büyük boyutta ayarlayın. Ancak fiziksel bir yayın ve mantıksal bir yayın aynı fiziksel kameradan kaynaklanıyorsa donanım sınırlamaları, fiziksel yayının görüş alanını mantıksal akışla aynı olmaya zorlayabilir.
    • Birden fazla fiziksel akıştan kaynaklanan bellek baskısını gidermek için, bir fiziksel akışın bir süre boyunca boşta kalması bekleniyorsa uygulamaların boş arabellekleri (tüketici tarafından serbest bırakılan ancak henüz üretici tarafından sıra dışı bırakılmayan arabellekler) devre dışı bırakmak için discardFreeBuffers kullanmasını sağlayın.
    • Farklı fiziksel kameralardan gelen fiziksel akışlar genellikle aynı isteğe eklenmiyorsa uygulamaların surface group kullanmasını sağlayın. Böylece, uygulamaya yönelik iki yüzeyi desteklemek için tek bir arabellek kuyruğu kullanılır ve bellek tüketimi azaltılır.