Eş zamanlı kamera yayını

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ı yayın sırasında desteklenmesi gereken zorunlu bir akış kombinasyonu grubu, kamera cihazının kamera özellikleri aracılığıyla SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS mülküne dahil edilir.

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örden fotoğraf çekme özelliği yok
YUV / PRIV s720p JPEG s1440p Standart görüntüleme devam ediyor
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 akış kombinasyonlarını kullanabilirsiniz.

s720p, 720p'yi (1280 x 720) veya StreamConfigurationMap.getOutputSizes() tarafından döndürülen belirli biçim için desteklenen maksimum çözünürlüğü ifade eder. s1440p, 1440p'yi (1920 x 1440) veya StreamConfigurationMap.getOutputSizes() tarafından döndürülen belirli biçim için desteklenen maksimum çözünürlüğü ifade eder. ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE özelliklerini içermeyen cihazlar, eşzamanlı çalışma sırasında en az tek bir Y16 akışı (sVGA çözünürlüğüne sahip Dataspace::DEPTH) desteklemelidir. sVGA, aşağıdaki iki çözünürlükten daha küçüktür:

  • Belirtilen biçim için maksimum çıkış çözünürlüğü
  • 640 x 480

Uygulama

Uygulamaların bir cihazı sorgulayarak cihazın eşzamanlı akışı desteklemesi durumunda 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 aynı anda çalıştıran bir uygulama kullanarak da test yapın.

Kaynak ayırma sorunları

Kamera HAL'lerinde, cihazın eşzamanlı çalışma çalışırken, özellikle de kaynak ayırma sorunlarıyla karşılaşabilirler. 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 HAL'i her kamera cihazına sınırlı donanım kaynakları ayırmalıdır.

Örnek senaryo

Aşağıdaki senaryoda bu sorun gösterilmektedir.

Sorun

Cihazın yapılandırması aşağıdaki gibidir:

  • Kamera kimliği 0, her biri bir ISP kaynağı kullanan geniş ve ultra geniş kamerayla desteklenen mantıksal bir kameradır.
  • Kamera Kimliği 1, bir İSS kaynağı alan bir kameradır.

Cihazın (telefon) iki İSS'si olmalıdır. 0 kamera kimliği açılır ve bir oturum yapılandırılırsa kamera HAL'i hem ultra geniş hem de geniş kamera kullanımını öngörerek iki ISP ayırabilir.

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 durum, sınırlı özelliklere neden olabilir. Örneğin, yakınlaştırma, fiziksel kamera kimliklerini değiştirmek sorunlu olabileceğinden tam yakınlaştırma aralığı oranını işleyemeyebilir.

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, kameranın 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 MultiViewTest.java#testDualCameraPreview testinin izin verdiği bir davranışla ilgili bir sorun oluşabilir.

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'i, oturumları yapılandırmadan önce eşzamanlı çalışma için açılan kamera kimliklerinin tamamını bilmediği için donanım kaynaklarını ayırması zor olabilir (bu kaynaklar için bir rekabet olduğu varsayılır).

Bu sorunu gidermek için, eşzamanlı yayını desteklemenin yanı sıra geriye dönük uyumluluğu da koruyan kamera HAL'leri, eşzamanlı olarak çalışan tüm kameralar için tam akış yapılandırmasını destekleyemiyorsa openCamera çağrılarını ERROR_MAX_CAMERAS_IN_USE ile reddetmelidir.