Warstwa abstrakcji sprzętowej aparatu na Androidzie (HAL) łączy wyższy poziom Camera Framework API w android.hardware.camera2, ze sterownikiem i sprzętem aparatu. Począwszy od Androida 13, interfejs HAL aparatu podczas programowania używa AIDL. Wprowadzenie Androida 8.0 Treble, przełączanie interfejsu Camera HAL API do stabilnego interfejsu zdefiniowanego przez język opisu interfejsu HAL (HIDL). Jeśli masz wcześniej utworzony moduł HAL i sterownik aparatu na Androida 7.0 i niższych, pamiętaj o istotnych zmian w procesie kamery.
HAL aparatu AIDL
Na urządzeniach z Androidem 13 lub nowszym aparat obejmuje obsługę HAL aparatu AIDL. Struktura kamery obsługuje HAL kamery HIDL, jednak funkcje aparatu zostały dodane Android 13 lub nowszy są dostępne tylko w Interfejsy HAL aparatu AIDL. Aby wdrożyć takie funkcje na urządzeniach przechodzących na z Androidem 13 lub nowszym, producenci urządzeń muszą przejście procesu HAL z interfejsów kamer HIDL na kamery AIDL i interfejsów.
Więcej informacji o zaletach AIDL znajdziesz w artykule AIDL dla HAL.
Wdrożenie interfejsu HAL aparatu AIDL
Implementację referencyjną interfejsu HAL aparatu AIDL znajdziesz w pliku
hardware/google/camera/common/hal/aidl_service/
.
Specyfikacje HAL AIDL znajdują się w następujących lokalizacjach:
- Dostawca aparatu:
hardware/interfaces/camera/provider/aidl/
- Urządzenie z kamerą:
hardware/interfaces/camera/device/aidl/
- Metadane aparatu:
hardware/interfaces/camera/metadata/aidl/
- Typowe typy danych:
hardware/interfaces/camera/common/aidl/
W przypadku urządzeń przechodzących na AIDL producenci urządzeń mogą potrzebować zmodyfikowania zasad SELinux Androida (sepolicy) i plików RC w zależności od struktury kodu.
Weryfikacja HAL kamery AIDL
Aby przetestować implementację HAL aparatu AIDL, upewnij się, że urządzenie spełnia wszystkie
testów CTS i VTS. Android 13 wprowadza test AIDL VTS,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Funkcje HAL3 aparatu
Celem przeprojektowania interfejsu Camera API na Androida jest znaczne zwiększenie możliwości aplikacji w sterowaniu podsystemem kamery na urządzeniach z Androidem przy jednoczesnej reorganizacji interfejsu API w celu zwiększenia jego wydajności i łatwości konserwacji. Dodatkowy elementy sterujące ułatwiają tworzenie wysokiej jakości aplikacji aparatu na Androida które mogą działać niezawodnie w różnych produktach, a jednocześnie dla konkretnego urządzenia, aby zmaksymalizować jakość skuteczność reklam.
Wersja 3 systemu podrzędnego aparatu porządkuje tryby działania w jednym ujednoliconym widoku, który można wykorzystać do implementacji wszystkich poprzednich trybów oraz kilku innych, takich jak tryb seryjny. Dzięki temu użytkownicy mają większą kontrolę nad ostrość i ekspozycję, a także więcej przetwarzania końcowego, np. redukcja szumów, i wyostrzenia. Ponadto uproszczone wyświetlanie ułatwia deweloperom aplikacji korzystanie z różnych funkcji aparatu.
Interfejs API modeluje podsystem kamery jako potok, który konwertuje żądań przechwycenia klatek w ramkach w formacie 1:1. Żądania zawiera wszystkie informacje o konfiguracji dotyczące przechwytywania i przetwarzania ramki. Obejmuje to rozdzielczość i format pikseli, ręczne sterowanie czujnikiem, obiektywem i lampą błyskową, tryby działania 3A, przetwarzanie RAW → YUV, generowanie statystyk itp.
Mówiąc najprościej, platforma aplikacji wysyła żądanie klatki z kamery. a podsystem kamery zwraca wyniki do strumienia wyjściowego. W metadane, które zawierają informacje takie jak przestrzenie kolorów czy soczewki. cieniowanie jest generowane dla każdego zestawu wyników. Wersję 3 kamery możesz traktować jako kanał do jednokierunkowej transmisji z wersji 1. Każde żądanie przechwytywania jest przekształcane w jeden obraz zarejestrowany przez czujnik, który jest przetwarzany w postaci:
- Obiekt wyniku z metadanymi dotyczącymi przechwycenia.
- Bufory danych obrazu od jednego do N, każdy na oddzielnej powierzchni docelowej.
Zestaw możliwych platform wyjściowych jest wstępnie skonfigurowany:
- Każda powierzchnia jest miejscem docelowym dla strumienia buforów obrazów o stałej rozdzielczości.
- Jako dane wyjściowe można skonfigurować jednocześnie niewielką liczbę platform (ok. 3).
Żądanie zawiera wszystkie wymagane ustawienia przechwytywania oraz listę danych wyjściowych
powierzchnie, na które mają trafiać bufory obrazów dla tego żądania (spośród wszystkich
skonfigurowany zestaw). Żądanie może być jednorazowe (z capture()
),
może się powtarzać w nieskończoność (z setRepeatingRequest()
). Zapisane fragmenty
mają wyższy priorytet niż powtarzające się żądania.
Omówienie HAL1 aparatu
Wersja 1 podsystemu aparatów została zaprojektowana jako „czarne skrzynki” o wysokim poziomie i z tymi 3 trybami działania:
- Podgląd
- Nagrywanie filmu
- Nieruchome zdjęcia
Każdy z tych trybów ma nieco inne funkcje, które się pokrywają. Utrudniało to wdrażanie nowych funkcji, takich jak tryb serii, który znajduje się pomiędzy dwoma trybami pracy.
Android 7.0 nadal obsługuje komponent HAL1 aparatu, ponieważ wiele urządzeń nadal z niego korzysta. Usługa aparatu Androida obsługuje implementację obu komponentów HAL (1 i 3), co jest przydatne, gdy chcesz obsługiwać mniej wydajny aparat przedni za pomocą komponentu HAL1 i bardziej zaawansowany aparat tylny za pomocą komponentu HAL3.
Jeden moduł HAL kamery (osobny) wersja ), na której znajduje się lista niezależnych aparatów, z których każdy o własnym numerze wersji. Obsługa urządzeń 2 lub nowszych wymaga modułu aparatu 2 lub nowszego. Takie moduły aparatu mogą mieć różne wersje urządzeń (oznacza to, że Android obsługuje implementację obu komponentów HAL).