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 o ponowną konfigurację sesji.
Przykłady i źródło
Implementacja parametrów sesji referencyjnej jest już częścią 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 CameraHal musi wypełnić ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
w odpowiednich statycznych metadanych aparatu i podać 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 trwania sesji rejestrowania.
Typowe przykłady to parametry, które wymagają czasochłonnej konfiguracji sprzętu lub zmiany wewnętrznego potoku kamery. W żądaniach rejestrowania nadal można 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 przekazywana do CameraHal zawiera zaktualizowane wartości parametrów sesji, które służą do efektywniejszego 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 pustą listę parametrów dostępnych sesji.
Weryfikacja
Funkcja CTS uwzględnia 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 należy wybierać z rozwagą. 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
ICameraDeviceSession
Wersja 3.5 i nowsza obsługuje isReconfigurationRequired
metodę, która zapewnia szczegółową kontrolę nad wewnętrznymi ustawieniami konfiguracji. 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. Po wdrożeniu tej funkcji klienty aparatów powinny zauważyć wzrost 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 rozgłaszanego parametru sesji, platforma kamery wywołuje 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 kamery pomija wewnętrzną rekonfigurację. Jeśli HAL zwróci wartość true
, framework ponownie skonfiguruje strumienie i odpowiednio przekaże nowe wartości parametrów sesji.
Metoda isReconfigurationRequired
może być wywołana przez platformę jakiś czas przed przesłaniem do HAL żądania z nowymi parametrami. Żądanie można anulować przed jego przesłaniem. Dlatego interfejs HAL nie może używać tego wywołania metody do zmiany swojego zachowania.
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ń dotyczących kamery. W szczególności podczas normalnego nagrywania z kamery nie mogą występować żadne błędy ani opóźnienia.
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ć widocznego wpływu na działanie aparatu.
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 wykonać zapytania dotyczącego ponownej konfiguracji z powodu błędu wewnętrznego.
Zwracane wartości:
true
: wymagana jest ponowna konfiguracja strumienia.false
: ponowna konfiguracja strumienia nie jest wymagana.
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 ponowną konfigurację sesji można zweryfikować za pomocą przypadku testowego VTS w CameraHidlTest#configureStreamsWithSessionParameters
.