Funkcja parametrów sesji zmniejsza opóźnienia, umożliwiając klientom kamery aktywną konfigurację podzbioru kosztownych parametrów żądań, czyli parametrów sesji, w ramach fazy inicjowania sesji przechwytywania. Dzięki tej funkcji Twoje implementacje HAL otrzymują parametry klienta podczas fazy konfiguracji strumienia zamiast pierwszego żądania przechwytywania i mogą, w zależności od ich wartości, wydajniej przygotowywać i budować wewnętrzny potok.
W systemie Android 10 można poprawić wydajność, korzystając z opcjonalnej funkcji zapytania o rekonfigurację sesji, aby uzyskać większą kontrolę nad wewnętrzną logiką rekonfiguracji parametrów sesji. Aby uzyskać więcej informacji, zobacz Kwerenda rekonfiguracji sesji .
Przykłady i źródło
Implementacja parametru sesji referencyjnej jest już częścią CameraHal . Ta warstwa HAL korzysta ze starszego interfejsu Hal API. Zbinderyzowany CameraHal, który implementuje interfejs API HIDL kamery, musi używać odpowiedniego wpisu sessionParams HIDL, aby uzyskać dostęp do wszelkich nowych parametrów sesji przychodzących podczas konfiguracji strumienia.
Klienci kamery mogą wyszukiwać klucze wszystkich obsługiwanych parametrów sesji, wywołując funkcję getAvailableSessionKeys()
i ostatecznie ustawiając ich wartości początkowe za pomocą setSessionParameters()
.
Realizacja
Twoja implementacja CameraHal musi wypełnić ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
w odpowiednich statycznych metadanych kamery i zapewnić 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.
Typowymi przykładami są parametry, które wymagają czasochłonnej rekonfiguracji sprzętowej lub wewnętrznej zmiany potoku kamery. Kontrolę nad parametrami sesji można nadal sprawować w żądaniach przechwytywania, ale klienci powinni być świadomi i spodziewać się opóźnień w swoich aplikacjach.
Framework 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 następnie zaktualizowane wartości parametrów sesji, które służą 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ę 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 umieszczeniu określonego parametru na liście 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 strumienia. Parametry, które często się zmieniają, takie jak intencja przechwytywania, są nieodpowiednie, a dodanie ich do listy parametrów sesji może spowodować awarie CTS z powodu nadmiernej wewnętrznej ponownej konfiguracji.
Zapytanie o rekonfigurację sesji
Android 10 wprowadza opcjonalną funkcję zapytania o rekonfigurację sesji, aby poprawić wydajność, ponieważ wewnętrzne rekonfiguracje strumieni wynikające z modyfikacji wartości parametrów sesji mogą obniżyć wydajność. Aby rozwiązać ten problem, HIDL ICameraDeviceSession
w wersji 3.5 i nowszych obsługuje metodę isReconfigurationRequired
, która zapewnia precyzyjną kontrolę nad wewnętrzną logiką rekonfiguracji parametrów sesji. Dzięki tej metodzie 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 publicznych interfejsów API. Jeśli ta funkcja zostanie zaimplementowana, klienci kamery powinni zauważyć poprawę wydajności podczas pracy z parametrami sesji.
Realizacja
Aby obsługiwać zapytania dotyczące rekonfiguracji sesji, należy zaimplementować metodę isReconfigurationRequired
w celu sprawdzenia, czy dla nowych wartości parametrów sesji wymagana jest pełna rekonfiguracja strumienia.
Jeśli klient zmieni wartość dowolnego ogłaszanego parametru sesji, struktura kamery wywołuje metodę isReconfigurationRequired
. W zależności od określonych wartości warstwa HAL decyduje, czy wymagana jest pełna rekonfiguracja strumienia. Jeśli warstwa HAL zwróci false
, struktura kamery pomija wewnętrzną rekonfigurację. Jeśli warstwa HAL zwróci true
, struktura rekonfiguruje strumienie i odpowiednio przekazuje nowe wartości parametrów sesji.
Metoda isReconfigurationRequired
może zostać wywołana przez platformę na jakiś czas przed wysłaniem żądania z nowymi parametrami do HAL, a żądanie może zostać anulowane przed wysłaniem. Dlatego HAL nie może używać tego wywołania metody do zmiany swojego zachowania w jakikolwiek sposób.
Implementacja 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 to mieć żadnego wpływu na działanie oczekujących żądań kamery. W szczególności podczas normalnego strumieniowania z kamery nie mogą występować żadne usterki ani opóźnienia.
Urządzenie i implementacja warstwy HAL muszą spełniać następujące wymagania dotyczące wydajności:
- Nie wolno zmieniać ustawień sprzętu i oprogramowania aparatu.
- Użytkownik nie może mieć widocznego wpływu na działanie aparatu.
Metoda isReconfigurationRequired
przyjmuje następujące argumenty:
-
oldSessionParams
: Parametry sesji z poprzedniej sesji. Zazwyczaj istniejące parametry sesji. -
newSessionParams
: Nowe parametry sesji ustawione przez klienta.
Oczekiwane kody stanu zwrotu to:
-
OK
: Pomyślna rekonfiguracja wymaga zapytania. -
METHOD_NOT_SUPPORTED
: Urządzenie z kamerą nie obsługuje zapytania o rekonfigurację. -
INTERNAL_ERROR
: Zapytanie rekonfiguracyjne nie może zostać zakończone 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, HAL zwraca METHOD_NOT_SUPPORTED
lub false
. Powoduje to zachowanie domyślnej usługi kamery, w której rekonfiguracja strumienia jest wyzwalana przy każdej zmianie parametrów sesji.
Walidacja
Funkcja kwerendy rekonfiguracji sesji może zostać zweryfikowana przy użyciu przypadku testowego VTS w CameraHidlTest#configureStreamsWithSessionParameters
.