Funkcja parametrów sesji zmniejsza opóźnienia, umożliwiając klientom kamer aktywne konfigurowanie podzbioru kosztownych parametrów żądań, czyli parametrów sesji, w ramach fazy inicjowania sesji przechwytywania. Dzięki tej funkcji implementacje warstwy HAL otrzymują parametry klienta podczas fazy konfiguracji strumienia zamiast pierwszego żądania przechwytywania i mogą, w zależności od ich wartości, efektywniej przygotowywać i budować wewnętrzny potok.
W systemie Android 10 można poprawić wydajność, korzystając z opcjonalnej funkcji zapytania rekonfiguracji sesji, aby uzyskać większą kontrolę nad logiką rekonfiguracji parametrów sesji wewnętrznej. Aby uzyskać więcej informacji, zobacz Zapytanie o rekonfigurację sesji .
Przykłady i źródło
Implementacja parametrów sesji referencyjnej jest już częścią CameraHal . Ta warstwa HAL korzysta ze starszego interfejsu Hal API. Związany CameraHal , który implementuje interfejs API HIDL kamery, musi korzystać z odpowiedniego wpisu HIDL sessionParams, aby uzyskać dostęp do wszelkich nowych parametrów sesji przychodzącej podczas konfiguracji strumienia.
Klienci kamery mogą wysyłać zapytania o klucze wszystkich obsługiwanych parametrów sesji, wywołując getAvailableSessionKeys()
i ostatecznie ustawiając ich początkowe wartości za pomocą setSessionParameters()
.
Realizacja
Twoja implementacja CameraHal musi wypełnić ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
w odpowiednich statycznych metadanych kamery i dostarczyć podzbiór ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
, który zawiera listę kluczy, które są trudne do zastosowania na klatkę i mogą powodować nieoczekiwane opóźnienia w przypadku modyfikacji w czasie trwania sesji przechwytywania.
Typowe przykłady obejmują parametry, które wymagają czasochłonnej rekonfiguracji sprzętu lub zmiany wewnętrznego potoku kamery. Kontrola nad parametrami sesji może być nadal sprawowana w żądaniach przechwytywania, ale klienci powinni być świadomi i oczekiwać opóźnień w swojej aplikacji.
Struktura monitoruje wszystkie przychodzące żądania i jeśli wykryje zmianę wartości parametru sesji, wewnętrznie rekonfiguruje kamerę. Nowa konfiguracja strumienia przekazywana do CameraHal zawiera zaktualizowane wartości parametrów sesji, które są używane do bardziej wydajnego 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 pozostawia pustą listę dostępnych parametrów sesji.
Walidacja
CTS zawiera następujące nowe przypadki testowania parametrów sesji:
-
CameraDeviceTest#testSessionConfiguration
-
CameraDeviceTest#testCreateSessionWithParameters
-
CameraDeviceTest#testSessionParametersStateLeak
-
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Ogólnie rzecz biorąc, po tym, jak pewien parametr jest częścią listy kluczy sesji, jego bieżąca wartość jest uwzględniana jako część parametrów sesji przekazywanych podczas konfiguracji strumienia w warstwie HAL.
Parametry sesji muszą być starannie dobrane. Wartości nie powinny zmieniać się często, jeśli w ogóle, między konfiguracjami strumieni. Parametry, które często się zmieniają, takie jak intencja przechwytywania, są nieodpowiednie i dodanie ich do listy parametrów sesji może spowodować błędy CTS z powodu nadmiernej wewnętrznej rekonfiguracji.
Zapytanie o rekonfigurację sesji
W systemie Android 10 wprowadzono opcjonalną funkcję zapytania rekonfiguracji sesji, aby poprawić wydajność, ponieważ rekonfiguracje strumienia wewnętrznego wynikające z modyfikacji wartości parametrów sesji mogą zmniejszyć wydajność. Aby rozwiązać ten problem, HIDL ICameraDeviceSession
wersji 3.5 i nowszych obsługuje metodę isReconfigurationRequired
, która zapewnia szczegółową kontrolę nad logiką rekonfiguracji parametrów sesji wewnętrznej. Korzystając z tej metody, rekonfiguracja strumienia może nastąpić dokładnie wtedy, gdy jest to wymagane.
Argumenty isReconfigurationRequired
dostarczają wymaganych informacji o każdej oczekującej modyfikacji parametrów sesji, umożliwiając różne rodzaje dostosowań specyficznych dla urządzenia.
Ta funkcja jest zaimplementowana tylko w usłudze kamery i HAL kamery. Nie ma dostępnych publicznie interfejsów API. Jeśli ta funkcja jest zaimplementowana, klienci kamer powinni zauważyć poprawę wydajności podczas pracy z parametrami sesji.
Realizacja
Aby obsługiwać zapytania rekonfiguracyjne sesji, należy zaimplementować metodę isReconfigurationRequired
, aby sprawdzić, czy dla nowych wartości parametrów sesji wymagana jest pełna rekonfiguracja strumienia.
Jeśli klient zmieni wartość dowolnego rozgłaszanego parametru sesji, struktura aparatu wywołuje metodę isReconfigurationRequired
. W zależności od określonych wartości, HAL decyduje, czy wymagana jest pełna rekonfiguracja strumienia. Jeśli HAL zwróci false
, struktura kamery pomija wewnętrzną rekonfigurację. Jeśli warstwa HAL zwróci true
, struktura ponownie konfiguruje strumienie i odpowiednio przekazuje nowe wartości parametrów sesji.
Metoda isReconfigurationRequired
może zostać wywołana przez platformę na jakiś czas przed przesłaniem żądania z nowymi parametrami do warstwy HAL, a żądanie można anulować przed przesłaniem. W związku z tym warstwa HAL nie może używać tego wywołania metody, aby w jakikolwiek sposób zmienić swoje zachowanie.
Wdrożenie HAL musi spełniać następujące wymagania:
- Struktura musi mieć możliwość wywołania metody
isReconfigurationRequired
w dowolnym momencie po skonfigurowaniu aktywnej sesji. - Nie może mieć wpływu na wydajność oczekujących żądań kamery. W szczególności nie może być żadnych usterek ani opóźnień podczas normalnego przesyłania strumieniowego z kamery.
Implementacja urządzenia i warstwy HAL musi spełniać następujące wymagania dotyczące wydajności:
- Nie wolno zmieniać ustawień sprzętowych i programowych aparatu.
- Nie może być widocznego dla użytkownika wpływu na działanie aparatu.
Metoda isReconfigurationRequired
przyjmuje następujące argumenty:
-
oldSessionParams
: Parametry sesji z poprzedniej sesji. Zwykle istniejące parametry sesji. -
newSessionParams
: Nowe parametry sesji ustawione przez klienta.
Oczekiwane kody statusu zwrotu to:
-
OK
: Pomyślna rekonfiguracja wymaga zapytania. -
METHOD_NOT_SUPPORTED
: Urządzenie z kamerą nie obsługuje zapytania o rekonfigurację. -
INTERNAL_ERROR
: Nie można zakończyć zapytania rekonfiguracyjnego z powodu błędu wewnętrznego.
Zwracane wartości to:
-
true
: wymagana jest ponowna konfiguracja strumienia. -
false
: ponowna konfiguracja strumienia nie jest wymagana.
Aby zignorować zapytanie o rekonfigurację sesji, warstwa HAL zwraca METHOD_NOT_SUPPORTED
lub false
. Powoduje to domyślne zachowanie usługi kamery, w którym rekonfiguracja strumienia jest wyzwalana przy każdej zmianie parametru sesji.
Walidacja
Funkcję zapytania rekonfiguracji sesji można zweryfikować za pomocą przypadku testowego VTS w CameraHidlTest#configureStreamsWithSessionParameters
.