Android, cihazların kamera cihazlarının eşzamanlı akışını desteklemesine izin verir. Örneğin, Örneğin, bir cihazda hem ön hem arka kameralar kullanılabilir. ile aynı anda oynatabilirsiniz. Android 11'den Camera2 API'si aşağıdaki yöntemleri içerir: kameraların eşzamanlı akışı destekleyip desteklemediğini belirlemek için telefon edip desteklenen akış yapılandırmaları.
getConcurrentCameraIds
: Şu anda bağlı olan kamera cihazının kombinasyon grubunu alır kamera cihazı oturumlarını eşzamanlı olarak yapılandırmayı destekleyen tanımlayıcılarisConcurrentSessionConfigurationSupported
: Sağlanan kamera cihazı grubunun ve bunlara karşılık gelen cihazların olup olmadığını kontrol eder. eşzamanlı olarak yapılandırılabilir.
Eşzamanlı modda desteklenmesi gereken bir dizi zorunlu yayın kombinasyonu
video izleme özellikleri, kamera cihazının kamera özellikleri aracılığıyla
SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS
getConcurrentStreamingCameraIds()
reklamı yapılan her kamera cihazı şu koşulları karşılamalıdır:
, eşzamanlı yayınlar için aşağıdaki garanti edilen yapılandırmaları destekler.
Hedef 1 | Hedef 2 | |||
---|---|---|---|---|
Tür | Maksimum boyut | Tür | Maksimum boyut | Örnek kullanım alanları |
YUV | s1440p | Uygulama içi video veya resim işleme | ||
PRIV | s1440p | Uygulama içi vizör analizi | ||
JPEG | s1440p | Vizörlü hareketsiz görüntü yakalama yok | ||
YUV / PRIV | s720p | JPEG | s1440p | Standart sabit görüntüleme |
YUV / PRIV | s720p | YUV / PRIV | s1440p | Önizlemeli uygulama içi video veya işleme |
MONOCHROME
özelliğine sahip cihazlar
(CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
)
içerir
CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
)
Y8 desteği, tüm garantili seçeneklerde Y8 akışlarının Y8 ile değiştirilmesini desteklemelidir
bile olabilir.
s720p
, 720p (1280 x 720) veya
döndüren belirli bir biçim
StreamConfigurationMap.getOutputSizes()
s1440p
, 1440p (1920 x 1440) veya
döndürdüğü belirli biçim
StreamConfigurationMap.getOutputSizes()
Özellikleri, özellikleri
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
en az tek bir Y16 akışını, Dataspace::DEPTH
sVGA'yı desteklemelidir
(Eşzamanlı çalışma sırasında sVGA'nın ikisinden daha küçük olduğu)
şu çözünürlüklerde bulabilirsiniz:
- belirtilen biçim için maksimum çıkış çözünürlüğü
- 640 x 480
Uygulama
Uygulamaların bir cihazı sorgulayarak cihazın
eşzamanlı akışı destekliyorsa
ICameraProvider@2.6
Aşağıdaki yöntemleri içeren HAL arayüzü:
ICameraProvider@2.6
HAL arayüzünün referans uygulaması için bkz.
emülasyonlu kamera HAL kitaplığını,
EmulatedCameraProviderHWLImpl.cpp
Doğrulama
Bu özelliği uygulamanızın istenen şekilde çalışıp çalışmadığını test etmek için
ConcurrentCameraTest.java
CTS testi. Ayrıca, birden fazla kamerayı açan ve akıllı telefonu çalışan
eşzamanlı olarak yapabilirsiniz.
Kaynak ayırma sorunları
Kamera HAL'lerinde, cihazın eşzamanlı olarak çalışma bu cihazlar kaynak ayırma sorunlarıyla karşılaşabilir, özellikle de web sitesinde yeterli görüntü sinyali işlemci (İSS) kaynağının aynı anda hem ön hem de arka (veya diğer) kameraların görüntüsünü oynatabilir, ancak olduğunu varsayalım. Bu durumda, kamera donanım soyutlama katmanının donanım kaynaklarını kullanabilir.
Örnek senaryo
Aşağıdaki senaryoda bu sorun gösterilmektedir.
Sorun
Cihaz aşağıdaki yapılandırmaya sahiptir:
- Kamera kimliği
0
, geniş ve ultra geniş kamerayla desteklenen mantıksal bir kameradır her biri bir İSS kaynağı alır. - Kamera Kimliği
1
, bir İSS kaynağı alan bir kameradır.
Cihazın (telefon) iki İSS'si olmalıdır. Kamera kimliği (0
) açılır ve oturum açılırsa
kamera HAL'sinin, bir işlem için farklı kullanımlar olacağını öngören iki İSS'nin
hem ultra geniş hem geniş kamera
kullanabilirsiniz.
Bu durumda ön kamera (kimlik: 1
)
kullanılabilmesini sağlar.
Çözüm
Çerçeve, bu sorunu çözmek için hem 0
hem de 1
kamera kimliklerini açabilir.
yapılandırmanın nasıl gerçekleşeceği konusunda kamera HAL'sine bir ipucu
(artık kameraların eşzamanlı çalışmasını beklediği için) kaynak ayırma.
Ancak bu, özelliklerin sınırlı olmasına yol açabilir. Örneğin, yakınlaştırma
tam yakınlaştırma aralığı oranına odaklanabiliyor (çünkü fiziksel
kimlikler sorunlu olabilir).
Bu çözümü uygulamak için aşağıdaki güncellemeleri yapın:
provider@2.6::ICameraProvider::getConcurrentCameraStreamingCameraIds
Kameraların eşzamanlı çalışması için kameranın çerçeve, başlamadan önce kamera cihazlarını (
@3.2::ICameraDevice::open
) açmalıdır tüm oturumları yapılandırdığınızdan emin olun. Bu, kameraya izin verir sağlayıcıların kaynakları uygun şekilde dağıtmasını sağlamak önemlidir.Projenin tamamını teslim edememe yakınlaştırma aralığı oranına dikkat edin. Kamera uygulamaları, kameraları aynı anda kullanırken
ZOOM_RATIO
kontrol ayarını yalnızca 1x ve TamZOOM_RATIO_RANGE
yerineMAX_DIGITAL_ZOOM
(bu fiziksel kameraların dahili geçişini engeller; bu da şirket daha fazla İSS gerektirir).
testDualKameraPreview ile ilgili sorun
Yukarıdaki güncellemeleri yaptığınızda, izin verilen davranışla ilgili bir sorun ortaya çıkabilir
MultiViewTest.java#testDualCameraPreview
testi tarafından gerçekleştirildi.
testDualCameraPreview
testi, oturumları yalnızca açıldıktan sonra yapılandırmaz
tüm kameralarda. Bu adım şu sırayı izler:
for each camera in cameraDevices :
device = openCamera(camera)
createCaptureSession(device);
Bununla birlikte, arka plandaki özel efektlerle
ERROR_MAX_CAMERAS_IN_USE [1]
Üçüncü taraf uygulamaları bu davranışa bağlı olabilir.
Kamera HAL'si, açılan kamera kimlikleri grubunun tamamını bilemez. oturumlarda yapılandırmaya devam etmek istiyorsanız bunu (biraz rekabet olduğunu varsayarak) donanım kaynaklarını tahsis etme.
Bu sorunu çözmek için, harici web sitelerinin yanı sıra,
eş zamanlı akışı desteklediğinden kamera HAL'leri, openCamera
için tam akış yapılandırmasını destekleyemiyorsa ERROR_MAX_CAMERAS_IN_USE
Tüm kameraların eş zamanlı olarak çalışması