Jednoczesna transmisja z kamery

Android pozwala urządzeniom obsługiwać jednoczesne strumieniowanie danych z kamer. Dla: Dzięki temu urządzenie może działać zarówno z przedniego, jak i tylnego aparatu. z powrotem. Od Androida 11 interfejs Camera2 API zawiera te metody, które aplikacje mogą wywoływać, aby określić, czy kamery obsługują jednoczesny streaming, oraz obsługiwane konfiguracje strumienia.

Zestaw obowiązkowych kombinacji strumieni, które muszą być obsługiwane podczas transmisji równoległych są uwzględniane w charakterystycznych cechach kamery urządzenia SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS usłudze.

Każda kamera reklamowana za pomocą getConcurrentStreamingCameraIds() musi obsługiwać te gwarantowane konfiguracje dla jednoczesnych transmisji.

Cel 1 Cel 2
Typ Maksymalny rozmiar Typ Maksymalny rozmiar Przykładowe zastosowania
YUV S1440P Przetwarzanie filmów lub obrazów w aplikacji
prIV S1440P Analiza wizjera w aplikacji
JPEG s1440p Brak nieruchomych zdjęć w wizjerze
YUV / PRIV S720P JPEG s1440p Standardowe obrazy nieruchome
YUV / PRIV s720p YUV / PRIV S1440P Film w aplikacji lub przetwarzanie z podglądem

Urządzenia obsługujące MONOCHROME (CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES) zawiera CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME). obsługująca Y8 musi obsługiwać zastępowanie strumieni YUV przez Y8 we wszystkich gwarantowanych kombinacje strumieni.

s720p oznacza rozdzielczość 720p (1280 x 720) lub maksymalną obsługiwaną rozdzielczość określony format zwracany przez funkcję StreamConfigurationMap.getOutputSizes() s1440p oznacza rozdzielczość 1440p (1920 x 1440) lub maksymalną obsługiwaną rozdzielczość dla danego formatu zwracanego przez StreamConfigurationMap.getOutputSizes(). Urządzenia, których funkcje nie obejmują: ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE musi obsługiwać co najmniej 1 strumień Y16, Dataspace::DEPTH z sVGA rozdzielczości podczas równoczesnego działania, gdzie sVGA jest mniejsza z dwóch wartości. w następujących rozwiązaniach:

  • maksymalna rozdzielczość wyjściowa dla danego formatu
  • 640 x 480

Implementacja

Aby umożliwić aplikacjom wysyłanie zapytań do urządzenia w celu określenia, czy jego aparaty obsługują jednoczesną transmisję strumieniową, zaimplementuj interfejs HAL o nazwie ICameraProvider@2.6, który zawiera te metody:

Więcej informacji o implementacji interfejsu HAL ICameraProvider@2.6znajdziesz tutaj: z emulowaną biblioteką HAL aparatu EmulatedCameraProviderHWLImpl.cpp

Weryfikacja

Aby sprawdzić, czy implementacja tej funkcji działa zgodnie z zamierzeniami, użyj testu CTS: ConcurrentCameraTest.java. Przeprowadź też testy za pomocą aplikacji, która otwiera kilka kamer i działa z nimi jednocześnie.

Problemy z przydzielaniem zasobów

Jeśli interfejsy HAL aparatu reklamują obsługę jednoczesnej pracy urządzeń, mogą napotkać problemy z przydziałem zasobów, zwłaszcza gdy na telefonie jest wystarczająco dużo zasobów procesora sygnału obrazu (ISP) do jednoczesnego przesyłania strumieniowego z obu kamer (przedniej i tylnej lub innych), ale nie do ich pełnej pojemności. W takim przypadku HAL aparatu musi przydzielać ograniczone zasobów sprzętowych do każdego aparatu.

Przykładowy scenariusz

Ten scenariusz obrazuje ten problem.

Problem

Urządzenie ma taką konfigurację:

  • Identyfikator kamery 0 to kamera logiczna z szerokokątnym i ultraszerokokątnym które zajmują jeden zasób ISP.
  • Identyfikator kamery 1 to kamera, która pobiera zasób dostawcy internetu.

Urządzenie (telefon) ma dwóch dostawców internetu. Jeśli identyfikator kamery 0 jest otwarty, a sesja może być skonfigurowane, że HAL aparatu rezerwuje 2 dostawców przy użyciu aparatu ultraszerokokątnego i szerokokątnego.

W takim przypadku przedni aparat (o identyfikatorze 1) nie może skonfigurować żadnych ponieważ używają sieci dostawców usług internetowych.

Rozwiązanie

Aby rozwiązać ten problem, platforma może otwierać obydwa identyfikatory kamery (0 i 1) przed skonfigurowaniem sesji, aby zapewnić wskazówkę dla HAL kamery na temat tego, przydzielać zasoby (ponieważ wymaga obecnie równoczesnego działania kamer). Może to jednak prowadzić do ograniczonych możliwości. Na przykład powiększenie jest w stanie obsłużyć pełny zakres powiększenia (ponieważ przełączanie aparatu fizycznego identyfikatory mogą sprawiać problemy).

Aby wdrożyć to rozwiązanie, wprowadź te zmiany w pliku provider@2.6::ICameraProvider::getConcurrentCameraStreamingCameraIds.

  • Aby umożliwić jednoczesną obsługę kamer, framework kamery musi otworzyć urządzenia z kamerą (@3.2::ICameraDevice::open) przed skonfigurowaniem sesji na urządzeniach z kamerą. Dzięki temu dostawcy kamer mogą odpowiednio przydzielić zasoby.

  • Aby rozwiązać problem z brakiem obsługi pełnego zakresu powiększenia, upewnij się, że aplikacje aparatu, gdy używają aparatów jednocześnie, używają ustawień ZOOM_RATIO tylko w zakresie od 1x do MAX_DIGITAL_ZOOM, a nie pełnego zakresu ZOOM_RATIO_RANGE (zapobiega to przełączaniu się aparatów w ramach aparatu fizycznego, co może wymagać większej liczby dostawców usług internetowych).

.

Problem z testDualCameraPreview

Wprowadzając te zmiany, możesz spowodować problem z zachowaniem dozwolonym przez test MultiViewTest.java#testDualCameraPreview.

Test testDualCameraPreview nie konfiguruje sesji dopiero po otwarciu wszystkich kamer. W tym celu wykonaj te czynności:

for each camera  in cameraDevices :
  device = openCamera(camera)
     createCaptureSession(device);

Toleruje jednak awarie otwartego aparatu ERROR_MAX_CAMERAS_IN_USE [1] Aplikacje innych firm mogą zależeć od tego działania.

Przed skonfigurowaniem sesji HAL aparatu nie będzie znać pełnego zestawu identyfikatorów kamer otwartych do jednoczesnego działania, więc może mieć trudności z przydzielaniem zasobów sprzętowych (zakładając, że są one w jakimś stopniu wykorzystywane).

Aby rozwiązać ten problem, zachować zgodność wsteczną i obsługiwać jednoczesne przesyłanie strumieniowe, komponenty HAL aparatu powinny odrzucać wywołania openCamera z argumentem ERROR_MAX_CAMERAS_IN_USE, jeśli nie mogą obsługiwać pełnej konfiguracji strumienia dla wszystkich aparatów działających jednocześnie.