Ç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ği sunmuştur. Mantıksal kamera cihazı, HAL ile entegre çok kameralı özelliklerle 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şip bunları kontrol edebilir.

Çoklu kamera desteği

1. Şekil. Çoklu kamera desteği

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

Örnekler ve kaynaklar

Çok kameralı cihazlar, mantıksal çok kameralı özellik ile birlikte tanıtılmalıdır.

Kamera istemcileri, belirli bir mantıksal kameranın oluşturulduğu fiziksel cihazların kamera kimliğini getPhysicalCameraIds() işlevini çağırarak sorgulayabilir. Sonuç kapsamında döndürülen kimlikler, setPhysicalCameraId() aracılığıyla fiziksel cihazları ayrı ayrı kontrol etmek için kullanılır. Bu tür bireysel isteklerden elde edilen sonuçlar, getPhysicalCameraResults() çağrılarak tam sonuçtan sorgulanabilir.

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

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

Uygulama

Destek kontrol 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 aynı boyuttaki (RAW akışları için geçerli değildir) ve aynı formattaki iki fiziksel kameradan gelen 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ü 3.5 veya daha yeni olan 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ı

Belirli bir donanım düzeyindeki kamera cihazı için zorunlu akış kombinasyonları, mantıksal kamera için CameraDevice.createCaptureSession'da gerekenlerle 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 bir RAW akışı yapılandırırsa mantıksal kamera cihazı farklı sensör boyutlarına sahip fiziksel alt kameralara geçmemelidir. Bu, mevcut RAW çekim uygulamalarının bozulmamasını sağlar.

RAW çekimi sırasında fiziksel alt kameralar arasında geçiş yaparak HAL'de uygulanan optik zoom'dan 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 temel fiziksel kameraları, cihaz seviyeleri için gerekli olan 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 setinin, tek tek fiziksel kameraların özellik setinin üst kümesi olması önerilir.

Android 9 çalıştıran cihazlarda, her garantili akış kombinasyonu için mantıksal kamera şunları desteklemelidir:

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

  • Mantıksal kamera RAW özelliğini desteklemiyor ancak temel alınan fiziksel kameralar destekliyorsa her fiziksel kameradan birer tane olmak üzere iki RAW akışı ekleme. Bu durum genellikle fiziksel kameraların farklı sensör boyutlarına sahip olması halinde ortaya çıkar.

  • Aynı boyutta ve biçimde bir mantıksal akış yerine fiziksel akış 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üçle ilgili dikkat edilmesi gereken noktalar

  • Performans:

    • Fiziksel akışları yapılandırmak ve yayınlamak, 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ı çekim hızını yavaşlatabilir.
  • Güç:

    • HAL'ın 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 şekillerde özelleştirebilirsiniz.

  • Birleştirilmiş mantıksal kamera cihazı çıkışı tamamen HAL uygulamasına bağlıdır. Birleştirilmiş mantıksal akışların fiziksel kameralardan nasıl elde edildiğine ilişkin karar, uygulama ve Android kamera çerçevesi için şeffaftır.
  • Ayrı ayrı fiziksel istekler ve sonuçlar isteğe bağlı olarak desteklenebilir. Bu tür isteklerdeki kullanılabilir parametreler de tamamen belirli HAL uygulamasına bağlıdır.
  • Android 10'dan itibaren HAL, getCameraIdList içinde bazı veya tüm PHYSICAL_ID'leri yayınlamamayı seçerek bir uygulama tarafından doğrudan açılabilecek kamera sayısını azaltabilir. Calling getPhysicalCameraCharacteristics daha sonra fiziksel kameranın özelliklerini döndürmelidir.

Doğrulama

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

Bu üç ITS testi, görüntülerin düzgün şekilde birleştirilmesini sağlamak için çok kameralı sistemleri hedefler:

1. sahne ve 4. sahne testleri, ITS-in-a-box test düzeneğiyle çalıştırılır. test_multi_camera_match testi, iki kamera da etkinleştirildiğinde görüntülerin merkezindeki parlaklığın eşleştiğini onaylar. test_multi_camera_alignment testi, kamera aralıklarının, yönlerinin ve bozulma parametrelerinin düzgün şekilde yüklendiğini onaylar. Çok kameralı sistemde geniş görüş alanına sahip bir kamera (>90o) varsa ITS kutusunun rev2 sürümü gerekir.

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 çok kameralı karelerin senkronize olduğunu onaylayan 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) aracılığıyla edinilebilir. Ayrıca, rev1 ITS kutusu West-Mark'tan ( (www.west-mark.com, dgoodman@west-mark.com) 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) getCameraIdList uygulamasında fiziksel alt kameraları gizleme. Bu sayede, uygulamaların doğrudan açabileceği kamera sayısı azalır ve uygulamaların karmaşık kamera seçimi mantığına sahip olması gerekmez.
  • (Android 11 veya sonraki sürümler) 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ırması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_RECTANGLES ve ANDROID_STATISTICS_FACE_LANDMARKS koordinat sistemini ayarlayarak yakınlaştırma sonrası görüş alanını sensörün etkin dizisi olarak ele almalıdır. ANDROID_SCALER_CROP_REGION'ın 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 kameraları olan çok kameralı cihazlarda, yalnızca tüm yakınlaştırma aralığı değeri veya aralığı destekliyorsa cihazın belirli bir değer veya aralık için desteği duyurduğundan 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'ı, 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şleme 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 odaklıysa mantıksal kameranın otomatik odaklama desteğini duyurduğundan emin olun. HAL, ultra geniş kamera için otomatik odaklama durum makinesini simüle etmelidir. Böylece uygulama, ultra geniş lense yakınlaştırdığında temel fiziksel kameranın sabit odaklı olduğu uygulama için şeffaf olur ve desteklenen AF modları için otomatik odaklama durum makineleri beklendiği gibi çalışır.
    • Geniş ve telefoto kameralar 4K @ 60 fps'yi, ultra geniş kamera ise yalnızca 4K @ 30 fps'yi veya 1080p @ 60 fps'yi destekliyorsa ancak 4K @ 60 fps'yi desteklemiyorsa mantıksal kameranın, desteklenen akış yapılandırmalarında 4K @ 60 fps'yi duyurmadığından emin olun. Bu, mantıksal kamera özelliklerinin bütünlüğünü garanti ederek uygulamanın ANDROID_CONTROL_ZOOM_RATIO değeri 1'den düşük olduğunda 4k @ 60 fps elde edememe 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 gerekmez. HAL, fiziksel akışlarla kombinasyonu destekliyorsa:
    • (Android 11 veya daha yeni sürümler) Stereo 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ımla elde edilebilecek en büyük boyuta getirin. Ancak fiziksel yayın ve mantıksal yayın aynı fiziksel kameradan geliyorsa donanım sınırlamaları nedeniyle fiziksel yayının görüş alanı mantıksal yayınla aynı olabilir.
    • Birden fazla fiziksel akışın neden olduğu bellek baskısını gidermek için uygulamaların, bir fiziksel akışın bir süre boyunca boşta kalması beklendiğinde boş arabelleklerin (tüketici tarafından serbest bırakılan ancak henüz üretici tarafından kuyruktan çıkarılmayan arabellekler) serbest bırakılması için discardFreeBuffers kullandığından emin olun.
    • Farklı fiziksel kameralardan gelen fiziksel akışlar genellikle aynı isteğe eklenmiyorsa uygulamaların surface group kullandığından emin olun. Böylece, iki uygulamaya yönelik yüzeyi desteklemek için tek bir arabellek sırası kullanılır ve bellek tüketimi azaltılır.