Parametry sesji

Funkcja parametrów sesji zmniejsza opóźnienia, umożliwiając klientom kamer aktywną konfigurację podzbioru kosztownych parametrów żądań, czyli parametrów sesji, w ramach fazy inicjowania sesji przechwytywania. Dzięki tej funkcji implementacje 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żesz poprawić wydajność, korzystając z opcjonalnej funkcji zapytania o rekonfigurację 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 API Hal. Powiązany obiekt CameraHal, który implementuje interfejs API HIDL kamery, musi używać odpowiedniego wpisu sessionParams HIDL, aby uzyskać dostęp do nowych parametrów sesji przychodzącej podczas konfiguracji strumienia.

Klienci kamer mogą wysyłać zapytania do kluczy 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 w poszczególnych klatkach i mogą powodować nieoczekiwane opóźnienia w przypadku modyfikacji w trakcie trwania sesji przechwytywania.

Typowe przykłady obejmują parametry wymagające czasochłonnej rekonfiguracji sprzętu lub zmiany potoku wewnętrznej kamery. Kontrolę nad parametrami sesji można nadal sprawować w żądaniach przechwytywania, ale klienci powinni być świadomi opóźnień w swoich aplikacjach i spodziewać się ich.

Framework monitoruje wszystkie przychodzące żądania i jeśli wykryje zmianę wartości parametru sesji, wewnętrznie rekonfiguruje kamerę. Nowa konfiguracja strumienia przekazana do CameraHal zawiera następnie zaktualizowane wartości parametrów sesji, które służą do efektywniejszej konfiguracji potoku kamery.

Dostosowywanie

Możesz zdefiniować znaczniki na dostępnej liście 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:

Ogólnie rzecz biorąc, gdy dany parametr znajduje się 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, pomiędzy konfiguracjami strumieni. Parametry, które często się zmieniają, takie jak zamiar przechwytywania, są nieodpowiednie i dodanie ich do listy parametrów sesji może spowodować awarie CTS z powodu nadmiernej wewnętrznej rekonfiguracji.

Zapytanie o rekonfigurację sesji

W systemie Android 10 wprowadzono opcjonalną funkcję zapytania o rekonfigurację sesji, która poprawia wydajność, ponieważ rekonfiguracja wewnętrznego strumienia wynikająca z modyfikacji wartości parametrów sesji może zmniejszyć wydajność. Aby rozwiązać ten problem, HIDL ICameraDeviceSession w wersji 3.5 i nowszych obsługuje metodę isReconfigurationRequired , która zapewnia precyzyjną kontrolę nad logiką rekonfiguracji parametrów sesji wewnętrznej. 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 kamerze HAL. Nie ma dostępnych publicznie interfejsów API. Jeśli ta funkcja zostanie zaimplementowana, klienci kamer 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 anonsowanego parametru sesji, struktura kamery wywołuje metodę isReconfigurationRequired . W zależności od konkretnych wartości warstwa HAL decyduje, czy wymagana jest pełna rekonfiguracja strumienia. Jeśli warstwa HAL zwróci false , struktura kamery pominie 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że zostać anulowane przed jego przesłaniem. Dlatego warstwa 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 konfiguracji aktywnej sesji.
  • Nie może to mieć żadnego wpływu na działanie oczekujących żądań kamery. W szczególności nie mogą występować żadne zakłócenia ani opóźnienia podczas normalnego przesyłania strumieniowego z kamery.

Urządzenie i implementacja HAL muszą spełniać następujące wymagania wydajnościowe:

  • Nie wolno zmieniać ustawień sprzętowych i programowych aparatu.
  • Nie może mieć to 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 ustawiane przez klienta.

Oczekiwane kody statusu zwrotu to:

  • OK : Wymagana pomyślna rekonfiguracja zapytania.
  • METHOD_NOT_SUPPORTED : Kamera nie obsługuje zapytania o rekonfigurację.
  • INTERNAL_ERROR : Zapytanie o rekonfigurację nie może zostać ukoń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, warstwa HAL zwraca METHOD_NOT_SUPPORTED lub false . Powoduje to domyślne zachowanie usługi kamery, w którym przy każdej zmianie parametrów sesji wyzwalana jest rekonfiguracja strumienia.

Walidacja

Funkcję zapytania o rekonfigurację sesji można sprawdzić za pomocą przypadku testowego VTS w CameraHidlTest#configureStreamsWithSessionParameters .