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, ale 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.
Aby dowiedzieć się więcej o zaletach AIDL, zapoznaj się z artykułem AIDL dla kont HAL.
Wdrożenie interfejsu HAL aparatu AIDL
Informacje o referencyjnej implementacji HAL aparatu AIDL znajdziesz w artykule
hardware/google/camera/common/hal/aidl_service/
Specyfikacje HAL AIDL znajdują się w następujących lokalizacjach:
- Dostawca aparatu:
hardware/interfaces/camera/provider/aidl/
- Aparat:
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 muszą zmodyfikować zasady Androida SELinux (sepolicy) i pliki RC w zależności od kodu. do jego struktury.
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 technologię AIDL VTS
test,
VtsAidlHalCameraProvider_TargetTest.cpp
Funkcje HAL3 aparatu
Celem zmiany interfejsu Android Camera API jest znaczne zwiększenie możliwość sterowania podsystemem aparatów na urządzeniach z Androidem przez aplikacje porządkowanie interfejsu API w celu zwiększenia jego wydajności i łatwości obsługi. 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.
W wersji 3 podsystemu aparatów tryby działania są przekształcane ujednolicony widok, który można wykorzystać do wdrożenia dowolnego z poprzednich trybów i kilka innych, np. tryb zdjęć seryjnych. 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. Ten uproszczony widok ułatwia też jak korzystać z różnych funkcji kamery.
Interfejs API modeluje podsystem kamery jako potok, który konwertuje żądań przechwycenia klatek w ramach formatu 1:1. Żądania zawiera wszystkie informacje o konfiguracji dotyczące przechwytywania i przetwarzania ramki. Obejmuje to rozdzielczość i format pikseli. ręczny czujnik, obiektyw i lampa błyskowa kontrola; tryby działania 3A; kontrola przetwarzania RAW->YUV; generowanie statystyk; i tak dalej.
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. Masz na myśli aparat w wersji 3 i jako potok do jednokierunkowego strumienia kamery w wersji 1. Konwersja następuje za każdym razem. na jeden obraz rejestrowany przez czujnik, który jest przetwarzany na:
- Obiekt wynikowy 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 ustalonej powierzchni i ich rozwiązania.
- 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.
![Model danych kamery](https://source.android.google.cn/static/docs/core/camera/images/camera_simple_model.png?authuser=8&hl=pl)
Rysunek 1. Główny model działania kamery
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ą. Udało się ciężko jest wdrożyć nowe funkcje, takie jak tryb zdjęć seryjnych, który należy do 2 tryby operacyjne.
![Schemat bloku kamery](https://source.android.google.cn/static/docs/core/camera/images/camera_block.png?authuser=8&hl=pl)
Rysunek 2. Elementy aparatu fotograficznego
Android 7.0 nadal obsługuje HAL1 aparatu, ponieważ wiele urządzeń nadal korzysta . Ponadto usługa aparatu w Androidzie obsługuje implementowanie obu kodów HAL (1 i 3), co jest przydatne, gdy chcesz obsługiwać aparat z HAL1 i bardziej zaawansowanym tylnym aparatem. 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. Do obsługi systemu wymagany jest moduł 2 lub nowszy kamery urządzeń 2 lub nowszych, które mogą być wyposażone w różne wersji (co mamy na myśli, jeśli mówimy, że Android obsługuje HAL).