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.
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:
- Bir uygulamaya da sunulan iki veya daha fazla fiziksel kamerayla desteklenen herhangi bir mantıksal kamera cihazı 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 korelasyon oluşturmak 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
. static
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ü/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
bölümünü, tek tek fiziksel kameralar için desteklenen parametrelerin listesiyle doldurun. Mantıksal cihaz, ayrı istekleri desteklemiyorsa liste boş olabilir.Ayrı ayrı istekler destekleniyorsa yakalama isteklerinin bir parçası olarak gelen ayrı ayrı
physicalCameraSettings
işleyin ve uygulayın ve ayrı ayrıphysicalCameraMetadata
buna göre ekleyin.Android 10'da kullanıma sunulan 3.5 veya sonraki sürümlerdeki Camera HAL cihazları için mantıksal kamerayı destekleyen mevcut etkin fiziksel kameranın kimliğini kullanarak
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
sonuç anahtarını doldurun.
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. CallinggetPhysicalCameraCharacteristics
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:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
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çinANDROID_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
veANDROID_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
'ınANDROID_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 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
veANDROID_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.
- Fiziksel kameraların etkin dizi boyutları farklıysa kamera HAL'ı,
- 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.