Obsługa wielu kamer

W Androidzie 9 wprowadzono obsługę interfejsu API dla wielu aparatów za pomocą nowego logicznego aparatu składającego się z co najmniej dwóch fizycznych aparatami skierowanymi w tę samą stronę. Logiczny aparat to są widoczne dla aplikacji jako pojedyncze urządzenie aparatu/sesja przechwytywania, co pozwala interakcji z funkcjami obsługi kilku aparatów zintegrowanymi z HAL. Aplikacje mogą opcjonalnie dostęp do strumieni, metadanych i elementów sterujących ich fizyczną transmisją z kamery, a także nad nimi kontrolować.

Obsługa wielu kamer

Rysunek 1. Obsługa wielu kamer

Na tym schemacie poszczególne identyfikatory aparatów są oznaczone kolorami. Aplikacja może nieprzetworzone bufory z każdej kamery fizycznej w tym samym czasie. Jest także pozwala skonfigurować oddzielne ustawienia i odbierać metadane z różnych aparaty fizyczne.

Przykłady i źródła

Urządzenia z wieloma aparatami muszą być reklamowane za pomocą atrybutu logiczną obsługą wielu aparatów.

Klienty aparatów mogą wysyłać zapytania o identyfikator kamery urządzeń fizycznych Aparat logiczny getPhysicalCameraIds() Identyfikatory zwrócone w ramach wyniku są następnie używane do sterowania urządzeniami fizycznymi pojedynczo przez setPhysicalCameraId() Wyniki tych indywidualnych żądań można uzyskać z pełnego wynik przez wywołanie getPhysicalCameraResults()

Żądania poszczególnych kamer fizycznych mogą obsługiwać tylko ograniczony podzbiór . Aby otrzymać listę obsługiwanych parametrów, programiści mogą wywołać getAvailablePhysicalCameraRequestKeys()

strumienie z kamery fizycznej są obsługiwane tylko w przypadku żądań, które nie są ponownie przetwarzane; tylko dla czujników monochromatycznych i typu Bayer.

Implementacja

Lista kontrolna pomocy

Aby dodać logiczne urządzenia z wieloma aparatami po stronie HAL:

W przypadku urządzeń z Androidem 9 aparaty muszą pozwala zastąpić jeden logiczny strumień YUV/RAW rzeczywistym strumieniem tego samego rozmiaru (nie dotyczy strumieni RAW) i tego samego formatu w przypadku kamery. Nie dotyczy to urządzeń z Androidem 10.

Na urządzeniach z Androidem 10, na których Wersja HAL urządzenia to 3,5 lub wyższej, aparat musi obsługiwać isStreamCombinationSupported. w których aplikacje mogą sprawdzać, czy konkretna kombinacja strumieni zawierających strumienie fizyczne są obsługiwane.

Mapa konfiguracji strumienia

W przypadku kamery logicznej wymagane kombinacje strumieni dla kamery urządzenia określony poziom sprzętu jest taki sam jak wymagany w CameraDevice.createCaptureSession Wszystkie strumienie w mapie konfiguracji strumienia muszą być strumieniami logicznymi.

Na potrzeby logicznego aparatu obsługującego format RAW z fizycznymi aparatami podrzędnymi o różnych rozmiarach, jeśli aplikacja skonfiguruje logiczny strumień RAW, logiczny aparat nie może przełączać się na fizyczne kamery podrzędne z innymi i rozmiarów czujnika. Dzięki temu istniejące aplikacje do robienia zdjęć RAW nie przestaną działać.

Aby korzystać z powiększenia optycznego zgodnego z HAL, przełączając się z fizycznymi aparatami podrzędnymi podczas nagrywania RAW, aplikacje muszą skonfigurować strumienie z fizycznej kamery podrzędnej zamiast logicznego strumienia RAW.

Gwarantowana kombinacja strumieni

Zarówno kamera logiczna, jak i powiązane z nią fizyczne kamery muszą gwarantować obowiązkowe kombinacje strumieni wymagane na poziomie urządzenia.

Aparat logiczny powinien działać tak samo jak kamera fizyczna modelu urządzenia w oparciu o jego poziom sprzętowy i możliwości. Zalecamy jest nadzbiorem poszczególnych kamer fizycznych.

Na urządzeniach z Androidem 9 w przypadku każdej wartości gwarantowanej transmisję strumieniową, kamera logiczna musi obsługiwać:

  • Zastąpienie jednego strumienia logicznego YUV_420_888 lub nieprzetworzonego dwoma strumieniami fizycznymi tych samych rozmiarów i formatów, a każdy z nich z osobnego aparatu fizycznego. rozmiar i format są obsługiwane przez aparaty fizyczne.

  • Dodanie 2 strumieni nieprzetworzonych, po jednym z każdej kamery fizycznej, jeśli kamera logiczna nie reklamuje możliwości formatu RAW, ale robią to aparaty fizyczne. Zwykle dzieje się tak, gdy aparaty fizyczne mają różne rozmiary czujników.

  • Użycie strumieni fizycznych zamiast strumienia logicznego o tym samym rozmiarze . Nie może to spowolnić liczby klatek podczas przechwytywania, gdy minimalny czas trwania klatek w przypadku strumienia fizycznego i logicznego jest taki sam.

Kwestie dotyczące wydajności i zasilania

  • Skuteczność:

    • Konfigurowanie i strumieniowanie fizycznych strumieni może spowolnić częstotliwość nagrywania z kamery logicznej z powodu ograniczeń zasobów.
    • Stosowanie ustawień fizycznego aparatu może spowolnić nagrywanie, jeśli w pomieszczeniach są różne liczby klatek na sekundę.
  • Zasilanie:

    • Optymalizacja zasilania HAL nadal działa w przypadku domyślnym.
    • Konfigurowanie strumieni fizycznych lub wysyłanie żądań dotyczących ich może zastąpić wewnętrzny klucz HAL i zwiększyć zużycie energii.

Dostosowywanie

Implementację urządzenia możesz dostosować na kilka sposobów.

  • Połączone dane wyjściowe logicznego aparatu fotograficznego zależą wyłącznie od interfejsu HAL implementacji. Decyzja o tym, jak uśrednione strumienie logiczne pochodzą z Fizyczne aparaty są przezroczyste dla aplikacji i aparatu z Androidem platformy.
  • Opcjonalnie mogą być obsługiwane poszczególne żądania fizyczne i wyniki. zestaw parametrów dostępnych w takich żądaniach zależy także od konkretnego wdrożenia HAL.
  • Od Androida 10 HAL może zmniejszyć liczbę aparatów, które można otwierać bezpośrednio przez aplikację, jeśli nie reklamować niektóre lub wszystkie identyfikatory PHYSical_ID w getCameraIdList Dzwonię pod numer getPhysicalCameraCharacteristics musi zwrócić właściwości fizycznego aparatu.

Weryfikacja

Logiczne urządzenia z wieloma kamerami muszą przekazywać wskaźnik CTS kamery tak jak każdy inny zwykły aparat. Przypadki testowe dotyczące urządzeń tego typu można znaleźć w LogicalCameraDeviceTest .

Te trzy testy ITS skupiają się na systemach obejmujących wiele kamer, aby ułatwić łączenie obrazów:

Testy punktów 1 i 4 są przeprowadzane przy użyciu Test ITS-in-a-box rip. Test test_multi_camera_match potwierdza, że jasność gdy obie kamery są włączone. W teście test_multi_camera_alignment potwierdza się, że odstępy między kamerami, orientacje, i parametry zniekształcenia są prawidłowo wczytywane. Jeśli jest wyposażony w aparat szerokokątny (>90o), wymagana jest wersja rev2 pudełka ITS.

Sensor_fusion to drugi sprzęt testowy, który umożliwia powtarzanie określonych instrukcji ruchu i potwierdza, że sygnatury czasowe żyroskopu i czujnika obrazu są zgodne oraz że i klatki z wielu aparatów są zsynchronizowane.

Wszystkie pudełka są dostępne przez AcuSpec, Inc. (www.acuspecinc.com, fred@acuspecinc.com) i MYWAY Produkcja (www.myway.tw, sprzedaż@myway.tw). Dodatkowo pudełko rev1 ITS można kupić w West-Mark. (www.west-mark.com, dgoodman@west-mark.com).

Sprawdzone metody

Aby móc w pełni korzystać z funkcji obsługi przez wiele aparatów, jednocześnie aplikacji, zastosuj te sprawdzone metody podczas implementacji urządzenie z wieloma aparatami:

  • (Android 10 lub nowszy) Ukryj fizyczne aparaty podrzędne w getCameraIdList Zmniejsza to liczbę kamer, które można bezpośrednio otworzyć co eliminuje konieczność stosowania złożonych algorytmów wyboru aparatu.
  • (Android 11 lub nowszy) Do logicznego aparatu dla wielu aparatów urządzenia obsługującego zoom optyczny, zastosuj ANDROID_CONTROL_ZOOM_RATIO. API i używaj ANDROID_SCALER_CROP_REGION wyłącznie w przypadku przycinania formatu. ANDROID_CONTROL_ZOOM_RATIO umożliwia pomniejszenie obrazu i uzyskanie większej precyzji. W tym przypadku HAL musi dostosować system współrzędnych ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS ANDROID_STATISTICS_FACE_RECTANGLES i ANDROID_STATISTICS_FACE_LANDMARKS po powiększeniu jako aktywnej tablicy czujnika. Więcej informacji na temat ANDROID_SCALER_CROP_REGION współpracuje z ANDROID_CONTROL_ZOOM_RATIO, Więcej informacji: camera3_crop_reprocess#cropping.
  • W przypadku urządzeń z wieloma aparatami, aparatów fizycznych, które różnią się możliwości, upewnij się, że urządzenie reklamuje obsługę określonej wartości lub zakres dla elementu sterującego tylko wtedy, gdy cały zakres powiększenia obsługuje wartość lub zakres dat. Na przykład: jeśli aparat logiczny składa się z obiektywu ultraszerokokątnego, Aparat szerokokątny i aparat z teleobiektywem wykonaj te czynności:
    • Jeśli rozmiary aktywnych tablic kamer fizycznych są różne, HAL kamery musi wykonać mapowanie aktywnych tablic kamer fizycznych na logiczną tablicę aktywnej kamery kamery dla ANDROID_SCALER_CROP_REGION, ANDROID_CONTROL_AE_REGIONS, ANDROID_CONTROL_AWB_REGIONS, ANDROID_CONTROL_AF_REGIONS ANDROID_STATISTICS_FACE_RECTANGLES i ANDROID_STATISTICS_FACE_LANDMARKS Dzięki temu z perspektywy aplikacji układ współrzędnych to rozmiar aktywnej tablicy kamery logicznej.
    • Jeśli aparat szerokokątny i teleobiektyw obsługują autofokus, ale ultraszerokokątny aparat ma stałą ostrość, upewnij się, że aparat logiczny reklamuje autofokus . W przypadku obiektywu ultraszerokokątnego HAL musi symulować maszynę stanu autofokusa Dzięki temu przy pomniejszaniu aplikacji do obiektywu ultraszerokokątnego ustawiony aparat fizyczny jest przezroczysty dla aplikacji. a maszyny stanowe autofokusa w obsługiwanych trybach AF działają nie jest oczekiwany.
    • Jeśli aparat szerokokątny i teleobiektyw obsługują rozdzielczość 4K przy 60 klatkach na sekundę, aparat ultraszerokokątny obsługuje tylko rozdzielczość 4K przy 30 kl./s lub 1080p przy 60 kl./s, ale nie 4K przy 60 kl./s, upewnij się, że kamera logiczna nie reklamuje rozdzielczości 4K 60 kl./s w obsługiwanych konfiguracjach strumieniowania. To gwarantuje wszystkich logicznych funkcji kamery, dzięki czemu pojawiają się problemy związane z brakiem uzyskania 4K przy 60 kl./s ANDROID_CONTROL_ZOOM_RATIO wartości mniejszej niż 1.
  • Patrz na Androida 10 – logicznego aparatu z wieloma aparatami nie jest wymagany do obsługi kombinacji strumieni obejmujących strumienie fizyczne. Jeśli HAL obsługuje kombinację strumieni fizycznych:
    • (Android 11 lub nowszy) Aby lepiej obsługiwać urządzenia takich jak głębia obrazu w dźwiękach stereo i śledzenie ruchu, fizycznego strumienia wyjściowego o jak największej wielkości, jaką może osiągnąć sprzęt. Jeśli jednak strumień fizyczny i logiczny pochodzą z tego samego aparat fizyczny, ograniczenia sprzętowe mogą wymuszać strumień fizyczny tak, aby był taki sam jak strumień logiczny.
    • Aby poradzić sobie z wykorzystaniem pamięci wywołanym przez wiele strumieni fizycznych: upewnij się, że aplikacje używają discardFreeBuffers rozdysponowanie wolnych buforów (buforów uwalnianych przez klienta, ale jeszcze nieumieszczone w kolejce przez producenta), jeśli oczekuje się, że strumień fizyczny nieaktywny przez pewien czas.
    • Jeśli strumienie fizyczne z różnych kamer fizycznych zwykle nie są do tego samego żądania, upewnij się, że aplikacje używają surface group tak by jedna kolejka buforowania była używana do tworzenia kopii zapasowych 2 platform skierowanych do aplikacji, zmniejszające wykorzystanie pamięci.