Çoklu Kamera Desteği

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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ğini tanıttı. Mantıksal kamera cihazı, HAL ile tümleşik çoklu kamera özellikleriyle etkileşime izin veren bir uygulamaya tek bir CameraDevice/CaptureSession olarak sunulur. Uygulamalar isteğe bağlı olarak temeldeki 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 bir fiziksel kameradan aynı anda ham arabellekler aktarabilir. Ayrı kontroller ayarlamak ve farklı fiziksel kameralardan ayrı meta veriler almak da mümkündür.

Örnekler ve kaynaklar

Çok kameralı cihazlar, mantıksal çoklu kamera özelliğiyle tanıtılmalıdır .

Kamera istemcileri, getPhysicalCameraIds() ç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 fiziksel cihazları setPhysicalCameraId() aracılığıyla ayrı ayrı kontrol etmek için kullanılır. Bu tür bireysel isteklerin sonuçları, getPhysicalCameraResults() tam sonuçtan sorgulanabilir.

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

Fiziksel kamera akışları yalnızca yeniden işleme alınmayan istekler için ve yalnızca monokrom ve bayer sensörleri 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 aynı boyuttaki (RAW akışları için geçerli değildir) ve iki fiziksel kameradan gelen aynı formattaki fiziksel akışlarla değiştirilmesini desteklemelidir. Bu, Android 10 çalıştıran cihazlar için geçerli değildir.

Android 10 çalıştıran ve kamera HAL cihaz sürümünün 3.5 veya üzeri olduğu 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 seviyesindeki kamera cihazı için zorunlu akış kombinasyonları, CameraDevice.createCaptureSession içinde gerekli olanla aynıdır. Akış yapılandırma haritasındaki tüm akışlar mantıksal akışlar olmalıdır.

Farklı boyutlardaki fiziksel alt kameralarla RAW özelliğini destekleyen bir mantıksal kamera cihazı için, bir uygulama mantıksal bir RAW akışını yapılandırırsa, mantıksal kamera cihazı farklı sensör boyutlarına sahip fiziksel alt kameralara geçmemelidir. 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 uygulanan optik yakınlaştırmadan 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 altında yatan fiziksel kameralar, cihaz seviyeleri için gerekli olan zorunlu akış kombinasyonlarını garanti etmelidir.

Mantıksal bir kamera cihazı, donanım düzeyine ve yeteneklerine bağlı olarak fiziksel bir kamera cihazıyla aynı şekilde çalışmalıdır. Özellik setinin, bireysel fiziksel kameraların bir üst seti olması önerilir.

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

  • Boyut ve biçimin fiziksel kameralar tarafından desteklenmesi koşuluyla, bir mantıksal YUV_420_888 veya ham akışı, her biri ayrı bir fiziksel kameradan aynı boyut ve biçimde iki fiziksel akışla değiştirme.

  • Mantıksal kamera RAW özelliği tanıtmıyorsa, ancak temeldeki fiziksel kameralar yapıyorsa, her bir fiziksel kameradan bir tane olmak üzere iki ham akış eklemek. Bu genellikle fiziksel kameralar farklı sensör boyutlarına sahip olduğunda ortaya çıkar.

  • Aynı boyut ve biçimdeki mantıksal bir akış yerine fiziksel akışları kullanma. 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üç konuları

  • Verim:

    • Fiziksel akışların yapılandırılması ve akışı, 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'ı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 şekillerde özelleştirebilirsiniz.

  • Mantıksal kamera cihazının birleştirilmiş çıktısı tamamen HAL uygulamasına bağlıdır. Fiziksel kameralardan birleştirilmiş mantıksal akışların nasıl türetildiğine ilişkin karar, uygulama ve Android kamera çerçevesi için şeffaftır.
  • Bireysel fiziksel istekler ve sonuçlar isteğe bağlı olarak desteklenebilir. Bu tür isteklerdeki kullanılabilir parametreler kümesi de tamamen belirli HAL uygulamasına bağlıdır.
  • Android 10'dan itibaren HAL, getCameraIdList içindeki PHYSICAL_ID'lerin bazılarının veya tümünün reklamını yapmamayı seçerek bir uygulama tarafından doğrudan açılabilen kameraların sayısını azaltabilir. getPhysicalCameraCharacteristics çağrılması, fiziksel kameranın özelliklerini döndürmelidir.

doğrulama

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

Bu üç ITS testi, görüntülerin uygun şekilde kaynaştırılmasını kolaylaştırmak için çoklu kamera sistemlerini hedefler:

Sahne 1 ve sahne 4 testleri, ITS-in-a-box test donanımıyla çalışır. 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 iddia eder. test_multi_camera_alignment testi, kamera aralıklarının, yönelimlerinin ve bozulma parametrelerinin düzgün şekilde yüklendiğini doğrular. Çoklu kamera sistemi bir Geniş FoV kamera (>90o) içeriyorsa, ITS kutusunun rev2 versiyonu gereklidir.

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

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

En iyi uygulamalar

Uygulama uyumluluğunu korurken çoklu kamera tarafından sağlanan özelliklerden tam olarak yararlanmak için mantıksal bir çoklu kamera cihazı uygularken şu en iyi uygulamaları izleyin:

  • (Android 10 veya üstü) Fiziksel alt kameraları getCameraIdList gizleyin. Bu, uygulamalar tarafından doğrudan açılabilen kamera sayısını azaltarak, uygulamaların karmaşık kamera seçim mantığına sahip olma ihtiyacını ortadan kaldırır.
  • (Android 11 veya üstü) 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ı kırpma için ANDROID_SCALER_CROP_REGION kullanın. ANDROID_CONTROL_ZOOM_RATIO , cihazın uzaklaştırma yapmasına ve daha iyi hassasiyet sağlamasına olanak tanır. Bu durumda, HAL, ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_ ANDROICS_REGLES_ STAT sensörünü aktif olarak görüntü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 -RECTROICS_ , algılayıcısını post-zoom olarak işlemek için ayarlamalıdır. ANDROID_CONTROL_ZOOM_RATIO ANDROID_SCALER_CROP_REGION 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ığı değeri veya aralığı destekliyorsa bir kontrol için belirli bir değer veya aralık için destek verdiğinden 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, HAL kamerasının fiziksel kameraların etkin dizilerinden ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_STATISTICS_FACE_LANDMARKS için ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES , ANDROID_CONTROL_AF_REGIONS için eşlemeyi yapması gerekir. 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 odak desteğini tanıttığından emin olun. HAL, ultra geniş kamera için bir otomatik odak durum makinesini simüle etmelidir, böylece uygulama ultra geniş merceğe uzaklaştığında, alttaki fiziksel kameranın sabit odak olduğu gerçeği uygulamaya ve otomatik odaklama durum makinelerine desteklenen AF modları için şeffaftır. 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 reklamını yapmadığından emin olun. desteklenen akış yapılandırmaları. Bu, mantıksal kamera özelliklerinin bütünlüğünü garanti eder ve uygulamanın 1'den küçü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 bir çoklu kamera gerekli değildir. HAL, fiziksel akışlarla bir kombinasyonu destekliyorsa:
    • (Android 11 veya üstü) Stereodan derinlik ve hareket izleme gibi kullanım durumlarını daha iyi ele almak için, fiziksel akış çıkışlarının görüş alanını donanımın ulaşabileceği kadar büyük yapın. Bununla birlikte, fiziksel bir akış ve bir mantıksal akış aynı fiziksel kameradan geliyorsa, donanım sınırlamaları, fiziksel akışın görüş alanını mantıksal akışla aynı olmaya zorlayabilir.
    • Birden çok 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 boş arabellekleri (tüketici tarafından serbest bırakılan, ancak henüz üretici tarafından kuyruğa alınmayan 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ğlı değilse, uygulamaların surface group kullandığından emin olun, böylece uygulamaya dönük iki yüzeyi desteklemek için bir arabellek kuyruğu kullanılır, böylece bellek tüketimi azaltılır.