Ç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 çok kameralı cihazlar için API desteği sundu. Mantıksal kamera cihazı, HAL ile entegre çoklu kamera özellikleriyle etkileşime olanak tanıyan bir uygulamada tek bir CameraDevice/CaptureSession olarak ortaya çıkar. 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 çoklu kamera yeteneğiyle birlikte yapılmalıdır.

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

Bağımsız fiziksel kamera istekleri, parametrelerin yalnızca sınırlı bir alt kümesini destekleyebilir. Geliştiriciler, desteklenen parametrelerin listesini almak için getAvailablePhysicalCameraRequestKeys() numaralı telefonu arayabilir.

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 eşlemesindeki tüm akışlar mantıksal akış olmalıdır.

Farklı boyutlarda fiziksel alt kameralarla RAW özelliğini destekleyen mantıksal kamera cihazları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ının bozulmaması sağlanır.

RAW çekim sırasında fiziksel alt kameralar arasında geçiş yaparak HAL uygulanan optik yakınlaştırma özelliğinden yararlanmak için uygulamaların, mantıksal bir 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, garantili her akış kombinasyonu için mantıksal kamera şunları desteklemelidir:

  • Boyut ve biçimin fiziksel kameralar tarafından desteklendiği varsayılarak, bir mantıksal YUV_420_888 veya ham 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çimde 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ırmak ve akış gerçekleştirmek, 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'nin 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çindeki PHYSical_ID özelliklerinden bazılarının veya tümünün reklamını yapmamayı seçerek bir uygulama tarafından doğrudan açılabilen kamera 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.

Bu üç ITS testi, görüntülerin düzgün bir ş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 görüntülerin merkezindeki parlaklığın eşleştiğini iddia eder. 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 çok kameralı cihazların sunduğu özelliklerden tam olarak yararlanmak için mantıksal çok kameralı 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 bir çok kameralı cihaz için ANDROID_CONTROL_ZOOM_RATIO API'sini uygulayın ve yalnızca en boy oranında kırpma yapmak için ANDROID_SCALER_CROP_REGION 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'in 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ı yeteneklere sahip fiziksel kameralara sahip çok kameralı cihazlarda, cihazın bir kontrol için belirli bir değer veya aralığı desteklediğini yalnızca yakınlaştırma aralığının tamamı değeri veya aralığı destekliyorsa 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 dizilerini mantıksal kamera etkin dizisine eşlemelidir. 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ş lense yakınlaştırıldığı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 bakıldığında, fiziksel akışları da içeren akış kombinasyonlarını desteklemek için mantıksal bir çoklu kamera gerekli değildir. HAL, fiziksel akışlarla bir 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.