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ć.
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:
- Dodaj
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
dowolnego aparatu logistycznego wspieranego przez dwa lub więcej z kamer, które są też widoczne dla aplikacji. - Wypełnij pole statyczne
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
metadanych z listą identyfikatorów aparatów fizycznych. - Wypełnij statyczne metadane związane z głębokością wymagane do skorelowania między
strumienie z fizycznej kamery piks.:
ANDROID_LENS_POSE_ROTATION
ANDROID_LENS_POSE_TRANSLATION
,ANDROID_LENS_INTRINSIC_CALIBRATION
,ANDROID_LENS_DISTORTION
ANDROID_LENS_POSE_REFERENCE
. Ustaw statyczne
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
metadanych na:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: Czujniki w trybie głównym bez sprzętowej synchronizacji migawki/ekspozycji.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: Dotyczy czujników w trybie głównym, sprzętowa synchronizacja migawki/ekspozycji.
Zapełnij
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
z listą parametrów obsługiwanych przez poszczególne aparaty fizyczne. lista może być pusta, jeśli urządzenie logiczne nie obsługuje poszczególnych żądań.Jeśli indywidualne prośby będą obsługiwane, przetwórz i zastosuj
physicalCameraSettings
które mogą być częścią żądań przechwytywania i dołączać indywidualnephysicalCameraMetadata
odpowiednio się zmienia.Urządzenia HAL aparatu w wersji 3.5 (wprowadzone w Androidzie 10) lub nowszym, wypełnij pole
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
. używając identyfikatora aktywnej kamery fizycznej, która tworzy kopię zapasową i aparat logiczny.
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 numergetPhysicalCameraCharacteristics
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:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
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żywajANDROID_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ędnychANDROID_SCALER_CROP_REGION
,ANDROID_CONTROL_AE_REGIONS
,ANDROID_CONTROL_AWB_REGIONS
,ANDROID_CONTROL_AF_REGIONS
ANDROID_STATISTICS_FACE_RECTANGLES
iANDROID_STATISTICS_FACE_LANDMARKS
po powiększeniu jako aktywnej tablicy czujnika. Więcej informacji na tematANDROID_SCALER_CROP_REGION
współpracuje zANDROID_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
iANDROID_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.
- 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
- 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.