Funkcja parametrów sesji zmniejsza opóźnienia, umożliwiając klientom kamery aktywne konfigurowanie podzbioru kosztownych parametrów żądania, czyli parametrów sesji, w ramach fazy inicjowania sesji przechwytywania. Dzięki tej funkcji implementacje HAL otrzymują parametry klienta podczas fazy konfiguracji strumienia, a nie podczas pierwszego żądania przechwytywania. W zależności od ich wartości mogą wydajniej przygotowywać i budować wewnętrzny potok.
W Androidzie 10 możesz zwiększyć wydajność, korzystając z opcjonalnej funkcji zapytania o ponowną konfigurację sesji, aby mieć większą kontrolę nad wewnętrzną logiką ponownej konfiguracji parametrów sesji. Więcej informacji znajdziesz w sekcji Zapytanie o ponowną konfigurację sesji.
Przykłady i źródło
Implementacja parametru sesji referencyjnej jest już częścią CameraHal. Ten HAL korzysta ze starszego interfejsu HAL API. Powiązany interfejs CameraHal, który implementuje interfejs API HIDL aparatu, musi używać odpowiedniego wpisu HIDL sessionParams do uzyskiwania dostępu do nowych przychodzących parametrów sesji podczas konfigurowania strumienia.
Klienci korzystający z kamery mogą wysyłać zapytania o klucze wszystkich obsługiwanych parametrów sesji, wywołując funkcję
getAvailableSessionKeys()
i ustawiać ich wartości początkowe za pomocą funkcji
setSessionParameters()
.
Implementacja
Implementacja CameraHal musi wypełniać pole
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
w odpowiednich statycznych metadanych aparatu i udostępniać podzbiór
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
który zawiera listę kluczy trudnych do zastosowania w przypadku poszczególnych klatek i które mogą powodować nieoczekiwane opóźnienia, gdy są modyfikowane w trakcie sesji rejestrowania.
Typowe przykłady to parametry, które wymagają czasochłonnej rekonfiguracji sprzętu lub zmiany wewnętrznego potoku kamery. Parametry sesji nadal można kontrolować w przypadku żądań przechwytywania, ale klienci powinni mieć świadomość, że w ich aplikacji mogą wystąpić opóźnienia.
Framework monitoruje wszystkie przychodzące żądania i jeśli wykryje zmianę wartości parametru sesji, wewnętrznie ponownie konfiguruje kamerę. Nowa konfiguracja strumienia przekazywana do CameraHal zawiera zaktualizowane wartości parametru sesji, które są używane do wydajniejszego konfigurowania potoku kamery.
Dostosowywanie
Możesz zdefiniować tagi na liście dostępnych parametrów sesji, która jest wypełniana po stronie CameraHal. Ta funkcja nie jest aktywna, jeśli CameraHal pozostawi pustą listę parametrów dostępnej sesji.
Weryfikacja
CTS zawiera te nowe przypadki testowania parametrów sesji:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Ogólnie rzecz biorąc, gdy dany parametr znajdzie się na liście kluczy sesji, jego bieżąca wartość jest uwzględniana jako część parametrów sesji przekazywanych podczas konfiguracji strumienia na warstwie HAL.
Parametry sesji muszą być starannie dobrane. Wartości nie powinny się często zmieniać (jeśli w ogóle) między konfiguracjami strumieni. Parametry, które często się zmieniają, np. intencja przechwytywania, nie są odpowiednie, a dodanie ich do listy parametrów sesji może spowodować błędy CTS z powodu nadmiernej wewnętrznej rekonfiguracji.
Zapytanie o ponowną konfigurację sesji
Android 10 wprowadza opcjonalną funkcję zapytania o ponowną konfigurację sesji, aby zwiększyć wydajność, ponieważ wewnętrzne ponowne konfiguracje strumienia wynikające ze zmian wartości parametrów sesji mogą ją obniżać. Aby rozwiązać ten problem, interfejs HIDLICameraDeviceSession
w wersji 3.5 i nowszych obsługuje metodę isReconfigurationRequired
, która zapewnia precyzyjną kontrolę nad logiką wewnętrznej rekonfiguracji parametru sesji. Dzięki tej metodzie ponowna konfiguracja strumienia może nastąpić dokładnie wtedy, gdy jest to wymagane.
Argumenty funkcji isReconfigurationRequired
zawierają wymagane informacje o każdej oczekującej zmianie parametru sesji
i umożliwiają różne rodzaje dostosowań do konkretnych urządzeń.
Ta funkcja jest zaimplementowana tylko w usłudze aparatu i warstwie HAL aparatu. Nie ma publicznych interfejsów API. Jeśli ta funkcja zostanie wdrożona, klienci kamer powinni zauważyć poprawę wydajności podczas pracy z parametrami sesji.
Implementacja
Aby obsługiwać zapytania o ponowną konfigurację sesji, musisz zaimplementować metodę
isReconfigurationRequired
sprawdzającą, czy w przypadku nowych wartości parametrów sesji wymagana jest pełna ponowna konfiguracja strumienia.
Jeśli klient zmieni wartość dowolnego parametru reklamowanej sesji, platforma aparatu wywoła metodę isReconfigurationRequired
. W zależności od konkretnych wartości warstwa HAL decyduje, czy wymagana jest pełna rekonfiguracja strumienia. Jeśli HAL zwróci false
, framework aparatu pominie wewnętrzną rekonfigurację. Jeśli HAL zwróci true
, framework ponownie skonfiguruje strumienie i odpowiednio przekaże nowe wartości parametrów sesji.
Metoda isReconfigurationRequired
może być wywoływana przez platformę jakiś czas przed przesłaniem do HAL żądania z nowymi parametrami. Żądanie można anulować przed jego przesłaniem. Dlatego HAL nie może używać tego wywołania metody do zmiany swojego zachowania w żaden sposób.
Implementacja HAL musi spełniać te wymagania:
- Platforma musi mieć możliwość wywołania metody
isReconfigurationRequired
w dowolnym momencie po skonfigurowaniu aktywnej sesji. - Nie może to mieć wpływu na wydajność oczekujących próśb o dostęp do kamery. W szczególności nie mogą występować żadne usterki ani opóźnienia podczas normalnego przesyłania strumieniowego z kamery.
Urządzenie i implementacja HAL muszą spełniać te wymagania dotyczące wydajności:
- Ustawienia sprzętowe i programowe kamery nie mogą być zmieniane.
- Nie może to mieć widocznego dla użytkownika wpływu na działanie aparatu.
Metoda isReconfigurationRequired
przyjmuje te argumenty:
oldSessionParams
: parametry sesji z poprzedniej sesji. Zwykle są to dotychczasowe parametry sesji.newSessionParams
: parametry nowej sesji ustawione przez klienta.
Oczekiwane kody stanu zwrotu to:
OK
: Zapytanie wymagane do pomyślnej rekonfiguracji.METHOD_NOT_SUPPORTED
: urządzenie z kamerą nie obsługuje zapytania o ponowną konfigurację.INTERNAL_ERROR
: Zapytanie o ponowną konfigurację nie może zostać wykonane z powodu błędu wewnętrznego.
Zwracane wartości to:
true
: Wymagana jest ponowna konfiguracja strumienia.false
: nie jest wymagana zmiana konfiguracji strumienia.
Aby zignorować zapytanie o ponowną konfigurację sesji, HAL zwraca wartość METHOD_NOT_SUPPORTED
lub false
. W rezultacie domyślna usługa kamery będzie działać w taki sposób, że ponowna konfiguracja strumienia będzie wywoływana przy każdej zmianie parametru sesji.
Weryfikacja
Funkcję zapytania o ponowną konfigurację sesji można zweryfikować za pomocą testu VTS w CameraHidlTest#configureStreamsWithSessionParameters
.