Eşzamanlı kamera görüntü akışı

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ılar
  • isConcurrentSessionConfigurationSupported: 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.6HAL 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 Tam ZOOM_RATIO_RANGE yerine MAX_DIGITAL_ZOOM (bu fiziksel kameraların dahili geçişini engeller; bu da şirket daha fazla İSS gerektirir).

ziyaret edin.

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ı