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.
Ş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:
- Bir uygulamaya da maruz kalan iki veya daha fazla fiziksel kamera tarafından desteklenen herhangi bir mantıksal kamera cihazı için bir
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
özelliği ekleyin. - Statik
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
meta veri alanını fiziksel kamera kimliklerinin bir listesiyle doldurun. - Fiziksel kamera akışlarının pikselleri arasında ilişki kurmak 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 moddaki sensörler için donanım deklanşör/pozlama senkronizasyonu yoktur. -
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Ana ikincil moddaki sensörler için, donanım deklanşör/pozlama senkronizasyonu.
-
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ayrı ayrı fiziksel kameralar için desteklenen parametrelerin bir listesiyle doldurun. Mantıksal aygıt bireysel istekleri desteklemiyorsa liste boş olabilir.Bireysel istekler destekleniyorsa, yakalama isteklerinin bir parçası olarak gelebilecek bireysel
physicalCameraSettings
işleyip uygulayın ve bireyselphysicalCameraMetadata
buna göre ekleyin.Kamera HAL cihazı sürüm 3.5 (Android 10'da kullanıma sunuldu) veya üzeri için, mantıksal kamerayı destekleyen mevcut aktif fiziksel kameranın kimliğini kullanarak
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
sonuç anahtarını doldurun.
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 sonragetPhysicalCameraCharacteristics
ç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:
-
scene1/test_multi_camera_match.py
-
scene4/test_multi_camera_alignment.py
-
sensor_fusion/test_multi_camera_frame_sync.py
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çinANDROID_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ç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. 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, bkzcamera3_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ırANDROID_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.
- Fiziksel kameraların aktif dizi boyutları farklıysa kamera HAL'si,
- 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.