Die Funktion für Sitzungsparameter reduziert Verzögerungen, da Kameraclients die Teilmenge der kostspieligen Anfrageparameter (die Sitzungsparameter) im Rahmen der Initialisierungsphase der Aufnahmesitzung aktiv konfigurieren können. Mit dieser Funktion erhalten Ihre HAL-Implementierungen die Clientparameter während der Streamkonfigurationsphase anstelle der ersten Aufnahmeanfrage und können die interne Pipeline je nach Werten effizienter vorbereiten und erstellen.
In Android 10 können Sie die Leistung verbessern, indem Sie die optionale Abfragefunktion für die Neukonfiguration von Sitzungen verwenden, um mehr Kontrolle über die Logik für die Neukonfiguration der internen Sitzungsparameter zu haben. Weitere Informationen finden Sie unter Abfrage zur Neukonfiguration der Sitzung.
Beispiele und Quelle
Eine Implementierung von Sitzungsparametern für die Referenz ist bereits Teil der CameraHal. Diese HAL verwendet die Legacy-Hal API. Die gebundene CameraHal, die die Kamera-HIDL API implementiert, muss den entsprechenden HIDL-Eintrag sessionParams verwenden, um während der Streamkonfiguration auf neue eingehende Sitzungsparameter zuzugreifen.
Kameraclients können die Schlüssel aller unterstützten Sitzungsparameter durch Aufrufen von getAvailableSessionKeys()
abfragen und schließlich die Anfangswerte über setSessionParameters()
festlegen.
Implementierung
Ihre CameraHal-Implementierung muss den Parameter ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
in den entsprechenden statischen Kamerametadaten einfügen und einen Teil von ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
angeben. Dieser enthält eine Liste von Schlüsseln, die sich nur schwer pro Frame anwenden lassen und bei Änderungen während der Aufnahmesitzung zu unerwarteten Verzögerungen führen können.
Typische Beispiele sind Parameter, die eine zeitaufwendige Hardware-Neukonfiguration oder eine Änderung der internen Kamerapipeline erfordern. Die Kontrolle über die Sitzungsparameter kann weiterhin in Erfassungsanfragen ausgeübt werden. Clients sollten jedoch mit Verzögerungen in ihrer App rechnen.
Das Framework überwacht alle eingehenden Anfragen. Wenn es eine Änderung am Wert eines Sitzungsparameters erkennt, wird die Kamera intern neu konfiguriert. Die neue Streamkonfiguration, die an CameraHal übergeben wird, enthält dann die aktualisierten Werte der Sitzungsparameter, mit denen die Kamerapipeline effizienter konfiguriert werden kann.
Personalisierung
Sie können Tags in der Liste der verfügbaren Sitzungsparameter definieren, die auf der CameraHal-Seite ausgefüllt wird. Diese Funktion ist nicht aktiv, wenn CameraHal die Liste der verfügbaren Sitzungsparameter leer lässt.
Zertifizierungsstufe
CTS umfasst die folgenden neuen Fälle zum Testen von Sitzungsparametern:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Wenn ein bestimmter Parameter Teil der Liste der Sitzungsschlüssel ist, wird sein aktueller Wert in der Regel als Teil der Sitzungsparameter übergeben, die während der Streamkonfiguration in der HAL-Ebene übergeben werden.
Sitzungsparameter müssen sorgfältig ausgewählt werden. Die Werte sollten sich zwischen den Streamkonfigurationen nicht häufig ändern, wenn überhaupt. Parameter, die sich häufig ändern, wie z. B. die Erfassungsabsicht, sind ungeeignet. Wenn Sie sie der Liste der Sitzungsparameter hinzufügen, kann dies aufgrund einer übermäßigen internen Neukonfiguration zu CTS-Fehlern führen.
Anfrage zur Neukonfiguration der Sitzung
In Android 10 wird eine optionale Abfragefunktion für die Neukonfiguration von Sitzungen eingeführt, um die Leistung zu verbessern, da Neukonfigurationen interner Streams aufgrund von Änderungen des Sitzungsparameterwerts die Leistung beeinträchtigen können. Aus diesem Grund unterstützt HIDL ICameraDeviceSession
Version 3.5 und höher die Methode isReconfigurationRequired
, die eine detaillierte Steuerung der Neukonfigurationslogik der internen Sitzungsparameter bietet. Mit dieser Methode kann die Streamkonfiguration genau dann erfolgen, wenn sie erforderlich ist.
Die Argumente für isReconfigurationRequired
enthalten die erforderlichen Informationen zu jeder ausstehenden Änderung von Sitzungsparametern, was verschiedene Arten von gerätespezifischen Anpassungen ermöglicht.
Diese Funktion ist nur im Kameradienst und in der Kamera-HAL implementiert. Es gibt keine öffentlichen APIs. Wenn diese Funktion implementiert ist, sollten Kamera-Clients Leistungsverbesserungen bei der Arbeit mit Sitzungsparametern sehen.
Implementierung
Wenn du Abfragen zur Neukonfiguration von Sitzungen unterstützen möchtest, musst du die Methode isReconfigurationRequired
implementieren, um zu prüfen, ob für neue Sitzungsparameterwerte eine vollständige Neukonfiguration des Streams erforderlich ist.
Wenn der Client den Wert eines angegebenen Sitzungsparameters ändert, ruft das Kamera-Framework die Methode isReconfigurationRequired
auf. Je nach den Werten entscheidet die HAL, ob eine vollständige Neukonfiguration des Streams erforderlich ist. Wenn die HAL false
zurückgibt, überspringt das Kamera-Framework die interne Neukonfiguration. Wenn der HAL true
zurückgibt, konfiguriert das Framework die Streams neu und übergibt die neuen Sitzungsparameterwerte entsprechend.
Die isReconfigurationRequired
-Methode kann vom Framework einige Zeit vor dem Senden einer Anfrage mit neuen Parametern an die HAL aufgerufen werden. Die Anfrage kann vor dem Senden abgebrochen werden. Daher darf der HAL diesen Methodenaufruf nicht verwenden, um sein Verhalten in irgendeiner Weise zu ändern.
Die HAL-Implementierung muss die folgenden Anforderungen erfüllen:
- Das Framework muss die
isReconfigurationRequired
-Methode jederzeit nach der Konfiguration der aktiven Sitzung aufrufen können. - Die Leistung ausstehender Kameraanfragen darf nicht beeinträchtigt werden. Insbesondere dürfen beim normalen Kamerastreaming keine Störungen oder Verzögerungen auftreten.
Die Geräte- und HAL-Implementierung muss die folgenden Leistungsanforderungen erfüllen:
- Die Hardware- und Softwareeinstellungen der Kamera dürfen nicht geändert werden.
- Die Kameraleistung darf nicht sichtbar beeinträchtigt werden.
Für die Methode isReconfigurationRequired
werden die folgenden Argumente verwendet:
oldSessionParams
: Sitzungsparameter aus der vorherigen Sitzung. Normalerweise die vorhandenen Sitzungsparameter.newSessionParams
: Neue Sitzungsparameter, die vom Client festgelegt werden.
Die erwarteten Rückgabestatuscodes sind:
OK
: Erfolgreiche Neukonfiguration erforderte Abfrage.METHOD_NOT_SUPPORTED
: Das Kameragerät unterstützt die Neukonfigurationsanfrage nicht.INTERNAL_ERROR
: Die Neukonfigurationsabfrage kann aufgrund eines internen Fehlers nicht abgeschlossen werden.
Die Rückgabewerte sind:
true
: Der Stream muss neu konfiguriert werden.false
: Eine Neukonfiguration des Streams ist nicht erforderlich.
Wenn eine Abfrage zur Neukonfiguration einer Sitzung ignoriert werden soll, gibt die HAL METHOD_NOT_SUPPORTED
oder false
zurück. Dies führt zum Standardverhalten des Kameradienstes, bei dem bei jeder Änderung des Sitzungsparameters die Neukonfiguration des Streams ausgelöst wird.
Zertifizierungsstufe
Die Abfragefunktion zur Sitzungsneukonfiguration kann mit dem VTS-Testfall in CameraHidlTest#configureStreamsWithSessionParameters
validiert werden.