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 rejestrowania. Dzięki tej funkcji implementacje HAL otrzymują parametry klienta w fazie konfiguracji strumienia zamiast w pierwszym żądaniu rejestrowania. W zależności od ich wartości mogą efektywniej przygotowywać i tworzyć wewnętrzny przepływ danych.
W Androidzie 10 możesz zwiększyć wydajność, korzystając z opcjonalnej funkcji zapytania o konfigurację sesji, aby uzyskać większą kontrolę nad logiką konfiguracji wewnętrznych parametrów sesji. Więcej informacji znajdziesz w artykule Zapytanie dotyczące zmiany konfiguracji sesji.
Przykłady i źródło
Implementacja parametru sesji referencyjnej jest już częścią interfejsu CameraHal. Ten HAL używa starszego interfejsu HAL. Binder CameraHal, który implementuje interfejs HIDL aparatu, musi używać odpowiedniego wpisu HIDL sessionParams do uzyskiwania dostępu do nowych parametrów sesji przychodzących podczas konfigurowania strumienia.
Klienci kamery mogą wysyłać zapytania o klucze wszystkich obsługiwanych parametrów sesji, wywołując funkcję getAvailableSessionKeys()
, a potem ustawiać ich początkowe wartości za pomocą funkcji setSessionParameters()
.
Implementacja
Implementacja interfejsu CameraHal musi wypełnić ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
w odpowiednich statycznych metadanych aparatu i przekazać podzbiór ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
, który zawiera listę kluczy, które trudno jest zastosować do poszczególnych klatek, i które mogą spowodować nieoczekiwane opóźnienia, jeśli zostaną zmodyfikowane w trakcie sesji rejestrowania.
Typowe przykłady to parametry, które wymagają czasochłonnej rekonfiguracji sprzętu lub zmiany wewnętrznego potoku kamery. W żądaniach rejestrowania można nadal kontrolować parametry sesji, ale klienci powinni być świadomi opóźnień w swoich aplikacjach.
Platforma monitoruje wszystkie przychodzące żądania i jeśli wykryje zmianę wartości parametru sesji, wewnętrznie zmienia konfigurację kamery. Nowa konfiguracja strumienia przekazana do CameraHal zawiera zaktualizowane wartości parametrów sesji, które są używane do bardziej efektywnego konfigurowania potoku kamery.
Dostosowywanie
Tagi możesz zdefiniować na liście dostępnych parametrów sesji, która jest wypełniana po stronie CameraHal. Ta funkcja nie jest aktywna, jeśli CameraHal pozostawia listę dostępnych parametrów sesji pustą.
Weryfikacja
CTS obejmuje te nowe przypadki testowania parametrów sesji:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Ogólnie, gdy dany parametr znajduje się na liście kluczy sesji, jego bieżąca wartość jest uwzględniana w ramach parametrów sesji przekazywanych podczas konfiguracji strumienia na poziomie HAL.
Parametry sesji muszą być starannie dobierane. Wartości nie powinny się często zmieniać (jeśli w ogóle) między konfiguracjami strumienia. Parametry, które często się zmieniają, np. intencja przechwycenia, nie są odpowiednie. Dodanie ich do listy parametrów sesji może spowodować błędy CTS z powodu nadmiernej konfiguracji wewnętrznej.
Zapytanie dotyczące zmiany konfiguracji sesji
Android 10 wprowadza opcjonalną funkcję zapytania o konfigurację sesji, która ma na celu poprawę wydajności, ponieważ wewnętrzna rekonfiguracja strumienia wynikająca z modyfikacji wartości parametrów sesji może zmniejszyć wydajność. Aby rozwiązać ten problem, HIDL w wersji 3.5 i wyższej obsługuje metodę isReconfigurationRequired
, która zapewnia precyzyjną kontrolę nad wewnętrzną logiką rekonfiguracji parametrów sesji.ICameraDeviceSession
Dzięki tej metodzie konfiguracja strumienia może być przeprowadzana dokładnie wtedy, gdy jest to potrzebne.
Argumenty funkcji isReconfigurationRequired
przekazują wymagane informacje o każdej modyfikacji parametru sesji oczekującej, umożliwiając różnego rodzaju dostosowywanie do konkretnego urządzenia.
Ta funkcja jest implementowana tylko w usłudze aparatu i interfejsie aparatu HAL. Nie ma publicznych interfejsów API. Jeśli ta funkcja zostanie zaimplementowana, klienci kamer powinni zauważyć poprawę wydajności podczas pracy z parametrami sesji.
Implementacja
Aby obsługiwać zapytania dotyczące zmiany konfiguracji sesji, musisz zaimplementować metodę isReconfigurationRequired
, aby sprawdzić, czy w przypadku nowych wartości parametrów sesji wymagana jest całkowita zmiana konfiguracji strumienia.
Jeśli klient zmieni wartość dowolnego reklamowanego parametru sesji, framework aparatu wywoła metodę isReconfigurationRequired
. W zależności od konkretnych wartości HAL decyduje, czy wymagana jest pełna rekonfiguracja strumienia. Jeśli interfejs HAL zwróci wartość false
, framework aparatu pomija 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 zostać wywołana przez framework przed przesłaniem żądania z nowymi parametrami do HAL, a żądanie może zostać anulowane przed 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:
- Framework 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 żądań dostępu do kamery. Podczas strumieniowego przesyłania obrazu z kamery nie może być żadnych zakłóceń ani opóźnień.
Implementacja urządzenia i interfejsu HAL musi spełniać te wymagania dotyczące wydajności:
- Nie wolno zmieniać ustawień sprzętowych i programowych kamery.
- Nie może to mieć żadnego wpływu na działanie aparatu, który jest widoczny dla użytkownika.
Metoda isReconfigurationRequired
przyjmuje te argumenty:
oldSessionParams
: parametry sesji z poprzedniej sesji. Zwykle są to parametry bieżącej sesji.newSessionParams
: nowe parametry sesji ustawiane przez klienta.
Oczekiwane kody stanu zwracania:
OK
: pomyślnie skonfigurowano zapytanie wymagające ponownej konfiguracji.METHOD_NOT_SUPPORTED
: urządzenie z kamerą nie obsługuje zapytania o konfigurację.INTERNAL_ERROR
: nie można ukończyć zapytania dotyczącego zmiany konfiguracji z powodu wewnętrznego błędu.
Zwracane wartości:
true
: wymagana jest zmiana konfiguracji strumienia.false
: nie trzeba ponownie konfigurować strumienia.
Aby zignorować zapytanie o konfigurację sesji, HAL zwraca wartość METHOD_NOT_SUPPORTED
lub false
. W efekcie domyślne zachowanie usługi kamery powoduje, że konfiguracja strumienia jest wywoływana przy każdej zmianie parametru sesji.
Weryfikacja
Funkcję zapytania o konfigurację ponownego konfigurowania sesji można sprawdzić za pomocą testu VTS w CameraHidlTest#configureStreamsWithSessionParameters
.