Na tej stronie znajdziesz informacje o różnicach między wersjami w przypadku kodów HAL i interfejsów API aparatu oraz powiązanych z nimi testów Compatibility Test Suite (CTS). Omawiamy również kilka zmian w architekturze, które mają wzmocnić i zabezpieczyć ramę kamery w Androidzie 7.0, przejście na Treble w Androidzie 8.0 oraz zmiany, jakie dostawcy aktualizacji muszą wprowadzić w swoich implementacjach aparatów.
Terminologia
Na tej stronie używamy tych terminów:
- interfejs Camera API1,
- Usługa aparatu na poziomie aplikacji na urządzeniach z Androidem 4.4 lub starszym, udostępniana przez klasę
android.hardware.Camera
. - Camera API2
- Framework aparatu na poziomie aplikacji na urządzeniach z Androidem 5.0 lub nowszym, udostępniony za pomocą pakietu
android.hardware.camera2
. - Interfejs HAL aparatu
- Warstwa modułu kamery zaimplementowana przez dostawców układów SOC. Publiczne struktury na poziomie aplikacji są oparte na HAL aparatu.
- Aparat HAL3.1
- Wersja interfejsu HAL aparatu wydana w ramach Androida 4.4.
- Aparat HAL3.2
- Wersja interfejsu HAL urządzenia do obsługi aparatu wydana w ramach Androida 5.0.
- Camera API1 CTS
- Zestaw testów CTS aparatu, które są wykonywane na podstawie interfejsu Camera API 1.
- Camera API2 CTS
- Dodatkowy zestaw testów CTS kamery uruchamianych razem z interfejsem Camera API2.
- Sopran
- Oddziela implementację dostawcy (oprogramowanie na niższym poziomie, specyficzne dla urządzenia, napisane przez producentów układów scalonych) od platformy Androida za pomocą nowego interfejsu dostawcy.
- HIDL
- Język definicji interfejsu HAL wprowadzony w Treble, służący do określania interfejsu między HAL a użytkownikami.
- VTS
- Pakiet testów dostawcy wprowadzony wraz z Treble.
Interfejsy API aparatu
Android obejmuje poniższe interfejsy API aparatu.
interfejs Camera API1,
W Androidzie 5.0 wycofany został interfejs Camera API 1, który jest stopniowo wycofywany, ponieważ rozwój nowej platformy koncentruje się na interfejsie Camera API 2. Ten okres wycofywania się jednak wydłuży, a wersje Androida będą jeszcze przez jakiś czas obsługiwać aplikacje z interfejsu Camera API1. W szczególności dotyczy to:
- Interfejsy Camera API 1 dla aplikacji. Aplikacje aparatu oparte na interfejsie Camera API1 powinny działać tak samo jak na urządzeniach z Androidem w starszych wersjach.
- Wersje interfejsu HAL aparatu. Obejmuje obsługę HAL1.0 aparatu.
Camera API2
Interfejs Camera API 2 udostępnia aplikacji niższy poziom kontroli nad aparatem, w tym wydajne przepływy burst/streaming bez kopiowania i sterowanie pojedynczymi klatkami w zakresie ekspozycji, wzmocnienia, balansu bieli, konwersji kolorów, redukcji szumów, wyostrzania itp. Szczegółowe informacje znajdziesz w filmie z konferencji Google I/O.
Android 5.0 i nowsze wersje zawierają interfejs Camera API 2, ale urządzenia z Androidem 5.0 lub nowszym mogą nie obsługiwać wszystkich funkcji tego interfejsu. Właściwość android.info.supportedHardwareLevel
, której aplikacje mogą używać do wysyłania zapytań za pomocą interfejsów Camera API 2, może raportować jeden z tych poziomów obsługi:
LEGACY
: te urządzenia udostępniają aplikacjom funkcje za pomocą interfejsów Camera API 2, które są mniej więcej takie same jak te udostępniane aplikacjom za pomocą interfejsów Camera API 1. Starsze wersje kodu koncepcyjnie przekładają wywołania interfejsu Camera API2 na wywołania interfejsu Camera API1. Starsze urządzenia nie obsługują funkcji interfejsu Camera API2, takich jak ustawienia poszczególnych klatek.LIMITED
: te urządzenia obsługują niektóre (ale nie wszystkie) funkcje interfejsu Camera API2 i muszą korzystać z interfejsu HAL aparatu w wersji 3.2 lub nowszej.FULL
: te urządzenia obsługują wszystkie główne funkcje interfejsu Camera API2 i muszą korzystać z interfejsu Camera HAL w wersji 3.2 lub nowszej oraz Androida w wersji 5.0 lub nowszej.LEVEL_3
: te urządzenia obsługują ponowne przetwarzanie YUV i przechwytywanie obrazu RAW, a także dodatkowe konfiguracje strumienia wyjściowego.EXTERNAL
: te urządzenia są podobne do urządzeńLIMITED
, ale z niektórymi wyjątkami. Na przykład niektóre informacje o czujniku lub obiektywie mogą nie być raportowane lub mieć mniej stabilną liczbę klatek na sekundę. Ten poziom jest używany w przypadku zewnętrznych kamer, takich jak kamery internetowe USB.
Poszczególne funkcje są udostępniane za pomocą właściwości android.request.availableCapabilities
w interfejsach API2 kamery. Urządzenia FULL
wymagają m.in. funkcji MANUAL_SENSOR
i MANUAL_POST_PROCESSING
. Możliwość RAW
jest opcjonalna nawet w przypadku urządzeń FULL
.
Urządzenia LIMITED
mogą wyświetlać reklamy dotyczące dowolnego podzbioru tych funkcji, a także żadnego z nich. Zawsze jednak musisz zdefiniować uprawnienie BACKWARD_COMPATIBLE
.
Obsługiwane poziomy sprzętowe urządzenia oraz konkretne funkcje interfejsu Camera API2, które obsługuje, są dostępne jako poniższe flagi funkcji umożliwiające filtrowanie aplikacji aparatu za pomocą interfejsu Camera API2 przez Google Play.
android.hardware.camera.hardware_level.full
android.hardware.camera.capability.raw
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.manual_post_processing
Wymagania dotyczące CTS
Urządzenia z Androidem 5.0 lub nowszym muszą przejść testy aparatu w ramach interfejsu Camera API 1, interfejsu Camera API 2 i weryfikatora CTS.
Urządzenia, które nie obsługują komponentu HAL aparatu 3.2 i nie obsługują wszystkich interfejsów Camera API 2, muszą przejść testy CTS Camera API 2. Urządzenie działa jednak w trybie Camera API2LEGACY
(w którym wywołania interfejsu Camera API2 są mapowane na wywołania interfejsu Camera API1), więc wszystkie testy CTS interfejsu Camera API2 związane z funkcjami lub możliwościami wykraczającymi poza interfejs Camera API1 są automatycznie pomijane.
Na starszych urządzeniach przeprowadzane testy CTS interfejsu Camera API2 CTS wykorzystują istniejące publiczne interfejsy i możliwości interfejsu Camera API1 bez żadnych nowych wymagań. Wykryte błędy (które powodują niepowodzenie interfejsu Camera API 2 w CTS) to błędy występujące już w obecnej warstwie abstrakcyjnej aparatu na urządzeniu, które mogą zostać znalezione przez istniejące aplikacje korzystające z interfejsu Camera API 1. Nie spodziewamy się wielu takich błędów (ale trzeba je naprawić, aby przejść testy CTS interfejsu Camera2 API2).
Wymagania dotyczące VTS
Urządzenia z Androidem 8.0 lub nowszym z implementacjami HAL w ramach bindera muszą przejść testy VTS dotyczące aparatu.
Zabezpieczanie mechanizmu kamery
Aby zwiększyć bezpieczeństwo frameworku multimediów i aparatów, Android 7.0 przenosi usługę aparatu z mediaservera. Począwszy od Androida 8.0 każdy zbinderyzowany interfejs aparatu (HAL) działa w procesie oddzielnym od usługi aparatu. W zależności od używanej wersji interfejsu API i interfejsu HAL dostawcy mogą być zmuszeni do wprowadzenia zmian w interfejsie HAL aparatu. W następnych sekcjach opisano zmiany w architekturze AP1 i AP2 w przypadku HAL1 i HAL3 oraz wymagania ogólne.
Zmiany architektoniczne dla interfejsu API1
Nagrywanie wideo za pomocą interfejsu API 1 może zakładać, że kamera i koder wideo działają w ramach tego samego procesu. Podczas korzystania z interfejsu API 1:
- HAL3, w którym usługa aparatu używa kolejki buforowej do przekazywania buforów między procesami, nie wymaga aktualizacji od dostawcy.
- HAL1, który obsługuje przekazywanie metadanych w buforze wideo. Producenci muszą zaktualizować HAL, aby używać
kMetadataBufferTypeNativeHandleSource
. FunkcjakMetadataBufferTypeCameraSource
nie jest już obsługiwana w Androidzie 7.0.
Zmiany w architekturze interfejsu API2
W przypadku interfejsu API2 na HAL1 lub HAL3 kolejka buforów przekazuje bufory, aby te ścieżki nadal działały. Architektura Androida 7.0 dla interfejsu API 2 na:
- Przeniesienie usługi cameraservice nie ma wpływu na HAL1 i nie wymaga aktualizacji ze strony dostawcy.
- HAL3 jest objęty tą zmianą, ale nie trzeba aktualizować oprogramowania dostawcy:
Dodatkowe wymagania
Zmiany architektoniczne wprowadzone w ramach wzmacniania zabezpieczeń mediów i ramy kamery obejmują te dodatkowe wymagania dotyczące urządzeń.
- Ogólne. Urządzenia wymagają dodatkowej przepustowości ze względu na standard IPC, co może wpływać na przypadki użycia kamer, takich jak nagrywanie z dużą prędkością. Dostawcy mogą mierzyć rzeczywisty wpływ, uruchamiając
android.hardware.camera2.cts.PerformanceTest
i aplikację Aparat Google do nagrywania filmów z dużą szybkością 120/240 FPS. Urządzenia wymagają też niewielkiej ilości dodatkowej pamięci RAM na potrzeby tworzenia nowego procesu. - Przekazywanie metadanych w buforze wideo (tylko w HAL1). Jeśli HAL1
zapisują metadane zamiast rzeczywistych danych ramki YUV w buforach wideo, musi użyć
kMetadataBufferTypeNativeHandleSource
jako typu bufora metadanych i przekazaćVideoNativeHandleMetadata
w buforach wideo. UsługakMetadataBufferTypeCameraSource
nie jest już obsługiwana na Androidzie 7.0. DziękiVideoNativeHandleMetadata
aparaty i ramy pracy multimediów mogą przekazywać bufory wideo między procesami, odpowiednio serializując i deserializując natywne uchwyty. - Adres uchwytu bufora nie zawsze przechowuje ten sam bufor (tylko HAL3). W przypadku każdego żądania przechwytywania HAL3 otrzymuje adresy uchwytów bufora. HAL nie może używać adresów do identyfikowania buforów, ponieważ adresy mogą przechowywać inny uchwyt bufora po zwróceniu bufora przez HAL. Musisz zaktualizować HAL, aby używać uchwytów buforów do identyfikowania buforów. Na przykład HAL otrzymuje adres uchwytu bufora A, który zawiera uchwyt A. Gdy HAL zwróci uchwyt bufora A, adres uchwytu bufora A może przechowywać uchwyt bufora B następnym razem, gdy HAL go otrzyma.
- Zaktualizuj zasady SELinux dla usługi cameraserver Jeśli zasady SELinux dotyczące konkretnego urządzenia przyznają serwerowi multimediów uprawnienia do uruchamiania kamery, musisz zaktualizować zasady SELinux, aby przyznać serwerowi kamery odpowiednie uprawnienia. Nie zalecamy powielania zasad SELinux serwera mediaserver w przypadku serwera cameraserver (ponieważ serwer mediaserver i serwer cameraserver wymagają zazwyczaj różnych zasobów w systemie). Usługa cameraserver powinna mieć tylko uprawnienia potrzebne do wykonywania funkcji aparatu. Niepotrzebne uprawnienia dotyczące aparatu w mediaserver powinny zostać usunięte.
- Oddzielenie interfejsu HAL aparatu od serwera aparatu. W Androidzie 8.0 i nowszych dodatkowo oddziela się binderized Camera HAL w procesie innym niż cameraserver. Komunikacja IPC odbywa się za pomocą interfejsów zdefiniowanych w specyfikacji HIDL.
Weryfikacja
W przypadku wszystkich urządzeń z kamerą i Androidem 7.0 sprawdź implementację, uruchamiając test CTS dla Androida 7.0. Chociaż Android 7.0 nie zawiera nowych testów CTS, które sprawdzają zmiany w usłudze aparatu, istniejące testy CTS nie przechodzą, jeśli nie wprowadzisz wspomnianych wyżej aktualizacji.
W przypadku wszystkich urządzeń z kamerą i Androidem 8.0 lub nowszym sprawdź implementację dostawcy, uruchamiając VTS.
Historia wersji HAL aparatu
Listę testów do oceny interfejsu HAL aparatu Androida znajdziesz na liście kontrolnej testów interfejsu Camera HAL.
Android 10
Android 10 wprowadza te zmiany.
Camera API
- Ulepszenia dotyczące wielu kamer, które umożliwiają używanie kamer fizycznych pojedynczo lub za pomocą odpowiednich kamer logicznych poprzez ukrycie identyfikatorów kamer fizycznych. Zapoznaj się z artykułem Obsługa wielu aparatów.
- Możliwość sprawdzenia, czy dana konfiguracja sesji jest obsługiwana bez obciążania wydajności tworzeniem nowej sesji.
Zobacz
CameraDevice
. - Możliwość pobierania zalecanych konfiguracji strumieni dla danego przypadku użycia, aby zwiększyć wydajność i oszczędność energii klienta. Zobacz
getRecommendedStreamConfigurationMap
. - Obsługa formatu obrazu JPEG o głębi 16 bitów. Więcej informacji znajdziesz w specyfikacji Dynamic Depth.
- Obsługa formatu obrazu HEIC. Zobacz Zdjęcia HEIF.
- Ulepszenia dotyczące prywatności. Aby można było pobrać klucze z
CameraCharacteristics
, klient musi mieć uprawnieniaCAMERA
. ZobaczgetKeysNeedingPermission
.
Interfejs HAL aparatu
W Androidzie 10 zostały zaktualizowane te wersje interfejsu Camera HAL:
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: statyczne informacje o aparacie fizycznego identyfikatora aparatu logicznego. Patrz: Obsługa wielu aparatów. isStreamCombinationSupported
: ta metoda obsługuje publiczny interfejs API, który pomaga klientom sprawdzić, czy konfiguracja sesji jest obsługiwana. Zobacz interfejs API do wysyłania zapytań o kombinacje strumieni.
ICameraDeviceSession
-
isReconfigurationNeeded
: metoda, która informuje framework kamery, czy wymagana jest pełna rekonfiguracja strumienia w przypadku nowych wartości parametrów sesji. Pozwala to uniknąć niepotrzebnych opóźnień w ponownej konfiguracji kamery. Zobacz zapytanie dotyczące rekonfiguracji sesji. - Interfejsy API zarządzania buforami HAL: te interfejsy API umożliwiają żądanie przez aparat HAL buforów z ramy aparatu tylko wtedy, gdy jest to wymagane, zamiast łączyć każde żądanie przechwytywania z odpowiednimi buforami w całym procesie aparatu, co może przynieść znaczne oszczędności pamięci.
-
signalStreamFlush
: sygnalizuje HAL, że usługa kamery ma wykonaćconfigureStreams_3_5
i że HAL musi zwracać wszystkie bufory wyznaczonych strumieni. -
configureStreams_3_5
: podobnie jak w przypadku funkcjiICameraDevice3.4.configureStreams
, ale dodatkowo funkcjastreamConfigCounter
zawiera licznikstreamConfigCounter
, który służy do sprawdzania warunków wyścigu między wywołaniami funkcjiconfigureStreams_3_5
isignalStreamFlush
.
-
Zmiany w ICameraDeviceCallback
:
-
requestStreamBuffers
: wywołanie zwrotne synchroniczne wywoływane przez HAL aparatu w celu zapytania serwera aparatu o bufory. ZobaczrequestStreamBuffers
. -
returnStreamBuffers
: wywołanie zwrotne synchroniczne dla HAL aparatu, które zwraca bufory wyjściowe do serwera aparatu. ZobaczreturnStreamBuffers
.
3.4
W Androidzie 10 do metadanych aparatu są dodawane te klucze:
- Formaty obrazów
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
- Tagi metadanych aparatu
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
ANDROID_HEIC_INFO_SUPPORTED
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
- Możliwości
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- Wartości klucza
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
- Dostępne konfiguracje strumienia dynamicznej głębi
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
- Dostępne konfiguracje strumienia HEIC
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
Moduł aparatu
W Androidzie 10 zaktualizowano te wersje modułów aparatu:
2,5
- Dodaje metodę
notifyDeviceStateChange
, która umożliwia urządzeniom powiadamianie interfejsu HAL aparatu, gdy zmiany fizyczne, takie jak złożenie, wpływają na działanie aparatu i przekierowywanie.
2.4
- Urządzenia z interfejsem API na poziomie 29 lub wyższym MUSZĄ raportować
true
dlaisTorchModeSupported
.
Android 9
W Androidzie 9 wprowadziliśmy poniższe aktualizacje interfejsu API2 i HAL aparatu.
Camera API
- Wprowadza interfejs API obsługi wielu aparatów, aby lepiej obsługiwać urządzenia z wieloma aparatami skierowanymi w tym samym kierunku, co umożliwia działanie takich funkcji jak bokeh czy płynne powiększanie. Dzięki temu aplikacje mogą wyświetlać kilka kamer na urządzeniu jako jedną jednostkę logiczną (kamerę logiczną). Prośby o przechwycenie można też wysyłać do poszczególnych urządzeń kamery, które są objęte jedną kamerą logiczną. Zapoznaj się z artykułem Obsługa wielu aparatów.
- Zawiera parametry sesji. Parametry sesji to podzbiór dostępnych parametrów rejestrowania, które po zmodyfikowaniu mogą spowodować poważne opóźnienia w przetwarzaniu. Te koszty można ograniczyć, jeśli klienci przekazują wartości początkowe podczas inicjowania sesji rejestrowania. Zobacz Parametry sesji.
- Dodaje klucze danych stabilizacji optycznej (OIS) na potrzeby stabilizacji i efektów na poziomie aplikacji. Zobacz
STATISTICS_OIS_SAMPLES
. - Dodaje obsługę zewnętrznego flesza. Zobacz:
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Dodaje zamiar śledzenia ruchu w
CAPTURE_INTENT
. ZobaczCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - Wycofuje funkcję
LENS_RADIAL_DISTORTION
i zastępuje w niej obiektLENS_DISTORTION
. - Dodaje tryby korekcji zniekształceń w
CaptureRequest
. ZobaczDISTORTION_CORRECTION_MODE
. - Dodano obsługę zewnętrznych aparatów USB/UVC na obsługiwanych urządzeniach. Zobacz
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Interfejs HAL aparatu
3.4
Zmiany w ICameraDeviceSession
-
configureStreams_3_4
: dodaje obsługę kamersessionParameters
i kamer logicznych. -
processCaptureRequest_3_4
: dodaje obsługę uwzględniania identyfikatorów fizycznych kamer w strukturze strumienia.
Aktualizacje do: ICameraDeviceCallback
-
processCaptureResult_3_4
: dodaje metadane aparatu w wynikach fotografowania.
3.3
W Androidzie 9 do metadanych aparatu są dodawane te klucze:
- Możliwości
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
- Tagi metadanych kamery
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
ANDROID_STATISTICS_OIS_DATA_MODE
ANDROID_STATISTICS_OIS_TIMESTAMPS
ANDROID_STATISTICS_OIS_X_SHIFTS
ANDROID_STATISTICS_OIS_Y_SHIFTS
Android 8.0
W wersji 8.0 Androida wprowadzono interfejs Treble. W przypadku Treble implementacje interfejsu Camera HAL muszą być związane. Android 8.0 zawiera też te kluczowe ulepszenia usługi Aparat:
- Współdzielone platformy: włącz wiele platform korzystających z tego samego konta
OutputConfiguration
- Systemowy interfejs API do niestandardowych trybów aparatu
onCaptureQueueEmpty
Więcej informacji o tych funkcjach znajdziesz w sekcjach poniżej.
Powierzchnie wspólne
Ta funkcja umożliwia wykorzystanie tylko jednego zestawu buforów do obsługi dwóch wyjść, takich jak podgląd i kodowanie wideo, co zmniejsza zużycie energii i pamięci. Aby móc korzystać z tej funkcji, producenci urządzeń muszą zadbać o to, aby ich implementacje HAL i gralloc umożliwiały tworzenie buforów gralloc u różnych użytkowników (takich jak kompozytor sprzętowy/GPU i koder wideo), a nie tylko dla jednego klienta. Usługa kamery przekazuje flagi wykorzystania przez użytkowników do HAL kamery i gralloc HAL. Muszą albo przydzielić odpowiednie rodzaje buforów, albo HAL musi zwracać błąd informujący o tym, że ta kombinacja konsumentów nie jest obsługiwana.
Więcej informacji znajdziesz w
enableSurfaceSharing
dokumentacji dla programistów.
Systemowy interfejs API do niestandardowych trybów aparatu
Interfejs Public Camera API określa 2 tryby działania: normalne i ograniczone nagrywanie z dużą prędkością. Mają one dość odmienną semantykę. Na przykład tryb szybkiego przesyłania danych jest ograniczony do maksymalnie 2 specyficznych wyjść naraz. Różne firmy OEM wyraziły zainteresowanie definiowaniem innych niestandardowych trybów dla funkcji sprzętowych. Tryb to po prostu liczba całkowita przekazana do configure_streams
. Zobacz:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Ta funkcja obejmuje wywołanie interfejsu API systemu, którego aplikacje do obsługi aparatu mogą używać do włączenia trybu niestandardowego. Te tryby muszą zaczynać się od wartości całkowitej 0x8000, aby uniknąć konfliktów z przyszłościowymi trybami dodanymi do publicznego interfejsu API.
Aby obsługiwać tę funkcję, producenci OEM muszą tylko dodać nowy tryb do swojego interfejsu HAL, który jest uruchamiany przez tę liczbę całkowitą przekazaną do interfejsu HAL w ramach konfiguracji strumieni, a następnie dopilnować, aby ich niestandardowa aplikacja do obsługi aparatu używała interfejsu API systemu.
Nazwa metody to
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
Zobacz:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
Celem tego interfejsu API jest zmniejszenie opóźnienia zmian ustawień, takich jak przybliżanie i oddalanie, przez utrzymywanie kolejki żądań w stanie jak najbardziej pustym. onCaptureQueueEmpty
nie wymaga pracy nad HAL; było to tylko rozszerzenie frameworku. Aplikacje, które chcą z niego korzystać, muszą dodać do niego słuchacza i odpowiednio na niego zareagować. Zazwyczaj polega to na wysłaniu kolejnego żądania przechwycenia do urządzenia z kamerą.
Interfejs HIDL aparatu
Interfejs Camera HIDL to całkowicie przebudowany interfejs Camera HAL, który korzysta ze stabilnych interfejsów API zdefiniowanych w HIDL. Wszystkie funkcje i możliwości aparatu wprowadzone w najnowszych starszych wersjach 3.4 i 2.4 (dla modułu aparatu) również są częścią definicji HIDL.
3.4
Niewielkie dodatki do obsługiwanych metadanych i zmiany w obsłudze danych_przestrzeni:
- Dodaj statyczne metadane
ANDROID_SENSOR_OPAQUE_RAW_SIZE
jako obowiązkowe, jeśli obsługiwany jest formatRAW_OPAQUE
. - Jeśli obsługiwany jest dowolny format RAW, musisz dodać metadane statyczne
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
. - Przełącz pole
camera3_stream_t data_space
na bardziej elastyczną definicję, korzystając z definicji kodowania przestrzeni danych w wersji 0. - Dodatki metadanych ogólnych, które można używać w HALv3.2 lub nowszej wersji:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
ANDROID_SENSOR_OPAQUE_RAW_SIZE
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3.3
Niewielka modyfikacja interfejsu HAL o rozszerzonych możliwościach:
- Aktualizacje interfejsu API dotyczące przetwarzania OPAQUE i YUV.
- Podstawowa obsługa buforów danych wyjściowych głębi.
- Dodano pole
data_space
do tabelicamera3_stream_t
. - Dodanie pola rotacji do tabeli
camera3_stream_t
. - Dodano tryb konfiguracji strumienia camera3 do
camera3_stream_configuration_t
.
3.2
Niewielka modyfikacja interfejsu HAL o rozszerzonych możliwościach:
- Wycofane:
get_metadata_vendor_tag_ops
. Zamiast tego użyj w kolumniecamera_common.h
wartościget_vendor_tag_ops
. - Wycofuje
register_stream_buffers
. Wszystkie bufory gralloc udostępniane przez framework do HAL wprocess_capture_request
mogą być nowe w dowolnym momencie. - Dodaj obsługę częściowych wyników.
process_capture_result
może być wywoływany wielokrotnie z podzbiorem dostępnych wyników, zanim będzie dostępny pełny wynik. - Dodaj szablon ręczny do
camera3_request_template
. Aplikacje mogą używać tego szablonu do bezpośredniego kontrolowania ustawień przechwytywania. - Zmienić specyfikacje strumieni dwukierunkowych i wejściowych.
- Zmień ścieżkę powrotu bufora wejściowego. Bufor jest zwracany w formie
process_capture_result
zamiastprocess_capture_request
.
3.1
Niewielka modyfikacja interfejsu HAL o rozszerzonych możliwościach:
configure_streams
przekazuje flagi użytkowania przez konsumenta do HAL.- usuń wywołanie, aby jak najszybciej usunąć wszystkie przesyłane żądania/bufory.
3,0
Pierwsza wersja HAL z rozszerzonymi możliwościami:
- Główna zmiana wersji, ponieważ ABI jest zupełnie inny. Nie ma zmian w wymaganych możliwościach sprzętowych ani modelu operacyjnym w wersji 2.0.
- Przerobione interfejsy kolejek żądań wejściowych i strumieni: wywołania frameworku w HAL z kolejną prośbą o dane i buforami strumieni już wyjętymi z kolejki. Dodano obsługę ramki synchronizacji, która jest niezbędna do wydajnej implementacji.
- Przeniesienie żądań do żądań, a większości powiadomień do wyników.
- Połączono wszystkie wywołania zwrotne w ramach frameworku w jedną strukturę, a wszystkie metody konfiguracji w jednym wywołaniu
initialize()
. - Aby uprościć zarządzanie strumieniami, wprowadziliśmy konfigurację strumienia w ramach pojedynczego wywołania.
Strumienie dwukierunkowe zastępują konstrukcję
STREAM_FROM_STREAM
. - Semantyka trybu ograniczonego dostępu dla starszych lub ograniczonych urządzeń.
2,0
Pierwsza wersja HAL z rozszerzonymi możliwościami (Android 4.2) [camera2.h]:
- Wystarczający do implementacji istniejącego interfejsu API
android.hardware.Camera
. - Umożliwia kolejkę ZSL na poziomie usługi aparatu.
- Nie testowano nowych funkcji, takich jak ręczna kontrola rejestrowania, rejestrowanie w formacie Bayer RAW, ponowne przetwarzanie danych RAW itp.
1,0
Początkowy interfejs HAL aparatu Androida (Android 4.0) [camera.h]:
- Przekształcony z poziomu abstrakcji CameraHardwareInterface w C++.
- Obsługuje interfejs
android.hardware.Camera
API.
Historia wersji modułu aparatu
Ta sekcja zawiera informacje o wersjach modułu aparatu na podstawie camera_module_t.common.module_api_version
. Dwie najbardziej istotne cyfry szesnastkowe oznaczają wersję główną, a dwie najmniej istotne – wersję podrzędną.
2.4
Ta wersja modułu aparatu wprowadza te zmiany w interfejsie API:
- Obsługa trybu latarki. Framework może włączyć tryb latarki na dowolnym urządzeniu z kamerą, które ma lampę błyskową, bez otwierania urządzenia. Aparat ma wyższy priorytet dostępu do lampy błyskowej niż moduł aparatu. Otwarcie aparatu powoduje wyłączenie latarki, jeśli została włączona przez interfejs modułu. W przypadku konfliktów zasobów, takich jak wywołanie
open()
w celu otwarcia urządzenia z kamerą, moduł HAL kamery musi poinformować framework za pomocą wywołania zwrotnego stanu trybu latarki, że tryb latarki został wyłączony. - Obsługa kamer zewnętrznych (np. kamer USB z podłączeniem „gorącego wtyczka”). W aktualizacjach interfejsu API określono, że statyczne informacje o kamerze są dostępne tylko wtedy, gdy kamera jest podłączona i gotowa do użycia z zewnętrznymi kamerami podłączanymi do zasilania. Połączenia z prośbą o informacje statyczne są nieprawidłowe, jeśli stan kamery jest inny niż
CAMERA_DEVICE_STATUS_PRESENT
. Platforma zlicza wyłącznie wywołania zwrotne zmiany stanu urządzenia w celu zarządzania listą dostępnych aparatów zewnętrznych. - Wskazówki dotyczące arbitrażu kamery Dodano obsługę wyraźnego wskazywania liczby urządzeń z kamerą, które można otwierać i używać jednocześnie. Aby określić prawidłowe kombinacje urządzeń, w strukturze
camera_info
zwracanej przez wywołanieget_camera_info
należy zawsze ustawić polaresource_cost
iconflicting_devices
. - Metoda inicjowania modułu. Jest wywoływany przez usługę aparatu po załadowaniu modułu HAL, aby umożliwić jednorazową jego inicjalizację. Jest on wywoływany przed wywołaniem innych metod modułu.
2.3
Ta wersja modułu aparatu dodaje obsługę starszych urządzeń z otwartym interfejsem HAL aparatu.
Framework może użyć tego klucza, aby otworzyć urządzenie z kamerą jako urządzenie z niższą wersją interfejsu HAL, jeśli to samo urządzenie obsługuje wiele wersji interfejsu API urządzenia.
Standardowy wywołanie wywołania modułu sprzętowego (common.methods->open
) nadal otwiera urządzenie z kamerą w najnowszej obsługiwanej wersji, która jest też wersją wymienioną w camera_info_t.device_version
.
2.2
Ta wersja modułu aparatu dodaje obsługę tagów dostawcy z modułu i wycofuje stare funkcje vendor_tag_query_ops
, które wcześniej były dostępne tylko na otwartym urządzeniu.
2.1
Ta wersja modułu aparatu dodaje obsługę asynchronicznych wywołań zwrotnych do frameworku z modułu HAL aparatu, który służy do informowania frameworku o zmianach stanu modułu aparatu. Moduły, które udostępniają prawidłową metodę set_callbacks()
, muszą podawać co najmniej tę wersję.
2,0
Moduł aparatu, który zwraca ten numer wersji, implementuje drugą wersję interfejsu HAL modułu aparatu. Urządzenia aparatów otwierane za pomocą tego modułu mogą obsługiwać interfejs HAL 1.0 lub 2.0 aparatu. Pole device_version
w polu Camera_info jest zawsze poprawne. Pole static_camera_characteristics
w polu camera_info
jest prawidłowe, jeśli pole device_version
ma wartość 2.0 lub większą.
1,0
Moduł aparatu, który zgłasza te numery wersji, implementuje początkowy interfejs HAL aparatu. Wszystkie urządzenia z kamerą, które można otworzyć za pomocą tego modułu, obsługują tylko wersję 1 komponentu HAL urządzenia z kamerą. Pola device_version
i static_camera_characteristics
w rekordzie camera_info
są nieprawidłowe. Ten moduł i połączone z nim urządzenia obsługują tylko interfejs API android.hardware.Camera
.