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.
Ş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:
- Bir uygulamaya da sunulan iki veya daha fazla fiziksel kamerayla desteklenen tüm mantıksal kamera cihazları için
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
özelliği ekleyin. - Statik
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
meta veri alanını fiziksel kamera kimliklerinin listesiyle doldurun. - Fiziksel kamera akışlarının pikselleri arasında ilişkilendirme yapmak için gereken derinlikle ilgili statik meta verileri doldurun:
ANDROID_LENS_POSE_ROTATION
,ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
,ANDROID_LENS_POSE_REFERENCE
. Statik
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
meta veri alanını şu şekilde ayarlayın:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Ana-ana modundaki sensörlerde donanım deklanşör/örnekleme senkronizasyonu yoktur.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Ana-ikincil moddaki sensörler için donanım deklanşör/örnekleme senkronizasyonu.
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
parametresini, fiziksel kameralar için desteklenen parametrelerin listesiyle doldurun. Mantıksal cihaz tek tek istekleri desteklemiyorsa liste boş olabilir.Bağımsız istekler destekliyorsa yakalama isteklerinin bir parçası olarak gelebilecek bağımsız
physicalCameraSettings
öğelerini işleyip uygulayın ve bağımsızphysicalCameraMetadata
öğelerini uygun şekilde ekleyin.Kamera HAL cihaz sürümleri 3.5 (Android 10'da kullanıma sunuldu) veya sonraki sürümler için
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
sonucu anahtarını, mantıksal kamerayı destekleyen mevcut etkin fiziksel kameranın kimliğini kullanarak doldurun.
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:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
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çinANDROID_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çinANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
,ANDROID_STATISTICS_FACE_RECTANGLES
veANDROID_STATISTICS_FACE_LANDMARKS
koordinat sistemini ayarlamalıdır.ANDROID_SCALER_CROP_REGION
'unANDROID_CONTROL_ZOOM_RATIO
ile birlikte nasıl çalıştığı hakkında daha fazla bilgi içincamera3_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
veANDROID_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.
- Fiziksel kameraların etkin dizi boyutları farklıysa kamera HAL'i,
- 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.