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ği sundu. Mantıksal kamera cihazı, HAL ile entegre çoklu kamera özellikleriyle etkileşime olanak tanıyan bir uygulamada tek bir CameraDevice/CaptureSession olarak ortaya çıkar. 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 çoklu kamera yeteneğiyle birlikte yapılmalıdır.
Kamera istemcileri, getPhysicalCameraIds()
çağrısı yaparak belirli bir mantıksal kameranın fiziksel cihazlarının kamera kimliğini sorgulayabilir.
Sonuç olarak döndürülen kimlikler, setPhysicalCameraId()
aracılığıyla fiziksel cihazları tek tek kontrol etmek için kullanılır.
Bu tür ayrı isteklerin sonuçları, getPhysicalCameraResults()
çağrısı yapılarak tam sonuçtan sorgulanabilir.
Bağımsız fiziksel kamera istekleri, parametrelerin yalnızca sınırlı bir alt kümesini destekleyebilir. Geliştiriciler, desteklenen parametrelerin listesini almak için getAvailablePhysicalCameraRequestKeys()
numaralı telefonu arayabilir.
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 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
. 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 moddaki sensörlerde donanım deklanşörü/pozlama senkronizasyonu yapılmaz.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
simgesini tek tek fiziksel kameralar için desteklenen parametrelerin listesiyle doldurun. Mantıksal cihaz tek tek istekleri desteklemiyorsa liste boş olabilir.Ayrı ayrı istekler destekliyorsa yakalama isteklerinin bir parçası olarak gelebilecek ayrı
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
physicalCameraSettings
physicalCameraMetadata
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 eşlemesindeki tüm akışlar mantıksal akış olmalıdır.
Farklı boyutlarda fiziksel alt kameralarla RAW özelliğini destekleyen mantıksal kamera cihazları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ının bozulmaması sağlanır.
RAW çekim sırasında fiziksel alt kameralar arasında geçiş yaparak HAL uygulanan optik yakınlaştırma özelliğinden 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 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, garantili her akış kombinasyonu için mantıksal kamera şunları desteklemelidir:
Boyut ve biçimin fiziksel kameralar tarafından desteklendiği varsayılarak, bir mantıksal YUV_420_888 veya ham 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çimde 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ırmak ve akış gerçekleştirmek, 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'nin 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çindeki PHYSical_ID özelliklerinden bazılarının veya tümünün reklamını yapmamayı seçerek bir uygulama tarafından doğrudan açılabilen kamera 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.
Bu üç ITS testi, görüntülerin düzgün bir ş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 görüntülerin merkezindeki parlaklığın eşleştiğini iddia eder. 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 çok kameralı cihazların sunduğu özelliklerden tam olarak yararlanmak için mantıksal çok kameralı 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 bir çok kameralı cihaz için
ANDROID_CONTROL_ZOOM_RATIO
API'sini uygulayın ve yalnızca en boy oranında kırpma yapmak içinANDROID_SCALER_CROP_REGION
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
'inANDROID_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ı yeteneklere sahip fiziksel kameralara sahip çok kameralı cihazlarda, cihazın bir kontrol için belirli bir değer veya aralığı desteklediğini yalnızca
yakınlaştırma aralığının tamamı değeri veya aralığı destekliyorsa 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 dizilerini mantıksal kamera etkin dizisine eşlemelidir. 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ş lense yakınlaştırıldığı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 bakıldığında, fiziksel akışları da 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 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.