Ç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 kamera cihazları için API desteğini sundu. Mantıksal kamera cihazı, HAL entegre çoklu kamera özellikleriyle etkileşime izin veren bir uygulamaya tek bir CameraDevice/CaptureSession olarak sunulur. Uygulamalar isteğe bağlı olarak temel fiziksel kamera akışlarına, meta verilere ve kontrollere erişebilir ve bunları kontrol edebilir.

Çoklu kamera desteği

Şekil 1 . Çoklu kamera desteği

Bu şemada farklı kamera kimlikleri renk kodludur. Uygulama, her fiziksel kameradan aynı anda ham arabellek akışı gerçekleştirebilir. Ayrı kontroller ayarlamak ve farklı fiziksel kameralardan ayrı meta veriler almak da mümkündür.

Örnekler ve kaynaklar

Çoklu kamera cihazlarının reklamı mantıksal çoklu kamera özelliğiyle yapılmalıdır.

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

Bireysel fiziksel kamera istekleri yalnızca sınırlı sayıda parametre alt kümesini destekleyebilir. Desteklenen parametrelerin bir listesini almak için geliştiriciler getAvailablePhysicalCameraRequestKeys() çağırabilir.

Fiziksel kamera akışları yalnızca yeniden işlenmeyen istekler için ve yalnızca monokrom ve bayer sensörler için desteklenir.

Uygulama

Destek kontrol listesi

HAL tarafına mantıksal çoklu kamera cihazları eklemek için:

Android 9 çalıştıran cihazlar için kamera cihazları, bir mantıksal YUV/RAW akışının, iki fiziksel kameradan aynı boyuttaki (RAW akışları için geçerli değildir) ve aynı formattaki fiziksel akışlarla değiştirilmesini desteklemelidir. 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 yüksek olduğu Android 10 çalıştıran cihazlarda, uygulamaların fiziksel akışlar içeren belirli bir akış kombinasyonunun desteklenip desteklenmediğini sorgulaması için kamera cihazının isStreamCombinationSupported desteklemesi gerekir.

Akış yapılandırma haritası

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

Farklı boyutlardaki fiziksel alt kameralarla RAW özelliğini destekleyen mantıksal bir kamera cihazı için, bir uygulama mantıksal bir RAW akışını yapılandırırsa mantıksal kamera cihazının farklı sensör boyutlarına sahip fiziksel alt kameralara geçiş yapmaması gerekir. Bu, mevcut RAW yakalama uygulamalarının bozulmamasını sağlar.

RAW yakalama sırasında fiziksel alt kameralar arasında geçiş yaparak HAL uygulamalı optik yakınlaştırmanın avantajlarından yararlanmak için uygulamaların mantıksal bir RAW akışı yerine fiziksel alt kamera akışlarını yapılandırması gerekir.

Garantili akış kombinasyonu

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

Mantıksal bir kamera cihazı, donanım seviyesi ve yeteneklerine göre fiziksel bir kamera cihazı ile aynı şekilde çalışmalıdır. Özellik setinin bireysel fiziksel kameraların bir üst seti olması önerilir.

Android 9 çalıştıran cihazlarda, garanti edilen her akış kombinasyonu için mantıksal kameranın şunları desteklemesi gerekir:

  • Boyut ve formatın fiziksel kameralar tarafından desteklenmesi koşuluyla, bir mantıksal YUV_420_888 veya ham akışın, her biri ayrı bir fiziksel kameradan gelen aynı boyut ve formatta iki fiziksel akışla değiştirilmesi.

  • Mantıksal kamera RAW özelliğinin tanıtımını yapmıyorsa ancak temeldeki fiziksel kameralar bunu yapıyorsa, her bir fiziksel kameradan bir tane olmak üzere iki ham akış ekleme. Bu genellikle fiziksel kameraların farklı sensör boyutlarına sahip olması durumunda meydana gelir.

  • Aynı boyut ve formattaki mantıksal akış yerine fiziksel akışların kullanılması. Bu, fiziksel ve mantıksal akışların minimum kare süresi aynı olduğunda yakalamanın kare hızını yavaşlatmamalıdır.

Performans ve güç hususları

  • Verim:

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

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

Özelleştirme

Cihaz uygulamanızı aşağıdaki yollarla ö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üretildiğine ilişkin karar, uygulama ve Android kamera çerçevesi açısından şeffaftır.
  • Bireysel fiziksel istekler ve sonuçlar isteğe bağlı olarak desteklenebilir. Bu tür isteklerdeki mevcut parametreler kümesi de tamamen spesifik HAL uygulamasına bağlıdır.
  • Android 10'dan itibaren HAL, getCameraIdList PHYSICAL_ID'lerin bir kısmının veya tamamının reklamını yapmamayı seçerek bir uygulama tarafından doğrudan açılabilen kamera sayısını azaltabilir. Daha sonra getPhysicalCameraCharacteristics çağrıldığında fiziksel kameranın özellikleri döndürülmelidir.

Doğrulama

Mantıksal çoklu kamera cihazları, diğer normal kameralar gibi kamera CTS'sini geçmelidir. Bu tür cihazları hedefleyen test senaryoları LogicalCameraDeviceTest modülünde bulunabilir.

Bu üç ITS testi, görüntülerin doğru şekilde birleştirilmesini kolaylaştırmak için çoklu kamera sistemlerini hedefler:

Sahne 1 ve sahne 4 testleri, ITS-in-a-box test donanımıyla gerçekleştirilir. test_multi_camera_match testi, iki kameranın her ikisi de etkinleştirildiğinde görüntülerin merkezinin parlaklığının eşleştiğini ileri sürer. test_multi_camera_alignment testi, kamera aralıklarının, yönelimlerinin ve distorsiyon parametrelerinin düzgün şekilde yüklendiğini doğrular. Çoklu kamera sistemi Geniş FoV kamera (>90o) içeriyorsa, ITS kutusunun rev2 versiyonu gereklidir.

Sensor_fusion tekrarlanan, belirlenmiş telefon hareketini mümkün kılan ve jiroskop ile görüntü sensörü zaman damgalarının eşleştiğini ve çoklu kamera çerçevelerinin senkronize olduğunu doğrulayan ikinci bir test donanımıdır.

Tüm kutulara AcuSpec, Inc. ( www.acuspecinc.com , fred@acuspecinc.com) ve MYWAY Manufacturing ( www.myway.tw , sales@myway.tw) aracılığıyla ulaşılabilir. Ek olarak rev1 ITS kutusu West-Mark ( www.west-mark.com , dgoodman@west-mark.com) aracılığıyla satın alınabilir.

En iyi uygulamalar

Uygulama uyumluluğunu korurken çoklu kameranın etkinleştirdiği özelliklerden tam olarak yararlanmak için, mantıksal bir çoklu kamera cihazı uygularken şu en iyi uygulamaları izleyin:

  • (Android 10 veya üzeri) Fiziksel alt kameraları getCameraIdList gizleyin. Bu, uygulamalar tarafından doğrudan açılabilen kameraların sayısını azaltarak uygulamaların karmaşık kamera seçim mantığına sahip olma ihtiyacını ortadan kaldırır.
  • (Android 11 veya üzeri) Optik yakınlaştırmayı destekleyen mantıksal çok kameralı bir cihaz için ANDROID_CONTROL_ZOOM_RATIO API'sini uygulayın ve yalnızca en boy oranı kırpma için ANDROID_SCALER_CROP_REGION kullanın. ANDROID_CONTROL_ZOOM_RATIO , cihazın uzaklaştırma yapmasını ve daha iyi hassasiyeti korumasını sağlar. Bu durumda HAL, yakınlaştırma sonrası alanı 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. sensör aktif dizisi olarak görülüyor. ANDROID_SCALER_CROP_REGION ANDROID_CONTROL_ZOOM_RATIO ile birlikte nasıl çalıştığı hakkında daha fazla bilgi için, bkz camera3_crop_reprocess#cropping .
  • Farklı yeteneklere sahip fiziksel kameralara sahip çok kameralı cihazlar için, cihazın yalnızca tüm yakınlaştırma aralığının değeri veya aralığı desteklemesi durumunda bir kontrol için belirli bir değer veya aralık için destek sunduğundan emin olun. Örneğin, mantıksal kamera bir ultra geniş, bir geniş ve bir telefoto kameradan oluşuyorsa aşağıdakileri yapın:
    • Fiziksel kameraların aktif dizi boyutları farklıysa kamera HAL'si, ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES ve ANDROID için fiziksel kameraların aktif dizilerinden mantıksal kamera aktif dizisine eşleme yapmalıdır ANDROID_STATISTICS_FACE_LANDMARKS böylece uygulamanın perspektifte koordinat sistemi mantıksal kameranın aktif dizi boyutudur.
    • Geniş ve telefoto kameralar otomatik odaklamayı destekliyorsa ancak ultra geniş kamera sabit odaklıysa, mantıksal kameranın otomatik odaklama desteği sunduğundan emin olun. HAL, ultra geniş kamera için bir otomatik odaklama durumu makinesini simüle etmelidir; böylece uygulama, ultra geniş merceğe uzaklaştırıldığında, temeldeki fiziksel kameranın sabit odaklı olduğu gerçeği uygulama için şeffaf olur ve desteklenen AF modları için otomatik odaklama durumu makineleri beklendiği gibi çalışın.
    • Geniş ve telefoto kameralar 4K @ 60 fps'yi destekliyorsa ve ultra geniş kamera yalnızca 4K @ 30 fps veya 1080p @ 60 fps'yi destekliyor ancak 4K @ 60 fps'yi desteklemiyorsa, mantıksal kameranın 4K @ 60 fps'yi desteklemediğinden emin olun. desteklenen akış yapılandırmaları. Bu, mantıksal kamera özelliklerinin bütünlüğünü garanti ederek uygulamanın, 1'den düşük bir ANDROID_CONTROL_ZOOM_RATIO değerinde 4k @ 60 fps'ye ulaşamama sorunuyla karşılaşmamasını sağlar.
  • Android 10'dan başlayarak, fiziksel akışlar içeren akış kombinasyonlarını desteklemek için mantıksal çoklu kameraya gerek yoktur. HAL, fiziksel akışlarla bir kombinasyonu destekliyorsa:
    • (Android 11 veya üzeri) Stereodan gelen derinlik ve hareket takibi gibi kullanım durumlarını daha iyi ele almak için, fiziksel akış çıkışlarının görüş alanını donanım tarafından elde edilebilecek kadar geniş yapın. Ancak fiziksel akış ve mantıksal akış aynı fiziksel kameradan kaynaklanıyorsa donanım sınırlamaları, fiziksel akışın görüş alanının mantıksal akışla aynı olmasını zorlayabilir.
    • Birden fazla fiziksel akışın neden olduğu bellek baskısını gidermek için, fiziksel bir akışın bir süre boşta kalması bekleniyorsa uygulamaların ücretsiz arabellekleri (tüketici tarafından serbest bırakılan ancak üretici tarafından kuyruğundan çıkarılmamış arabellekler) serbest bırakmak için discardFreeBuffers kullandığından emin olun. zamanın.
    • Farklı fiziksel kameralardan gelen fiziksel akışlar genellikle aynı isteğe bağlanmıyorsa uygulamaların surface group kullandığından emin olun; böylece uygulamaya bakan iki yüzeyi yedeklemek için bir arabellek kuyruğu kullanılır ve bellek tüketimi azalır.