Die Funktion für Sitzungsparameter reduziert Verzögerungen, da Kameraclients die Teilmenge der kostenintensiven Anfrageparameter, also die Sitzungsparameter, im Rahmen der Initiationsphase 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.
Unter Android 10 können Sie die Leistung mithilfe der optionalen Abfragefunktion zur Sitzungsneukonfiguration verbessern, um die Logik zur Neukonfiguration interner Sitzungsparameter besser zu steuern. Weitere Informationen finden Sie unter Abfrage zur Sitzungsneukonfiguration.
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.
Kamera-Clients können die Schlüssel aller unterstützten Sitzungsparameter abfragen, indem sie getAvailableSessionKeys()
aufrufen, und ihre Anfangswerte dann ü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 Neukonfiguration der Hardware 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 und konfiguriert die Kamera intern neu, wenn es eine Änderung am Wert eines Sitzungsparameters erkennt. 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 berücksichtigt, 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 zur Neukonfiguration von Sitzungen eingeführt, um die Leistung zu verbessern. Interne Stream-Neukonfigurationen, die aufgrund von Änderungen an Sitzungsparameterwerten erfolgen, können die Leistung beeinträchtigen. Um dieses Problem zu beheben, wird in HIDL-Version 3.5 und höher die Methode isReconfigurationRequired
unterstützt, die eine detaillierte Steuerung der Logik zur Neukonfiguration interner Sitzungsparameter ermöglicht.ICameraDeviceSession
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 Kameraclients bei der Arbeit mit Sitzungsparametern eine Leistungssteigerung feststellen.
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 spezifischen 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 die HAL true
zurückgibt, konfiguriert das Framework die Streams neu und gibt die neuen Sitzungsparameterwerte entsprechend weiter.
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
: Für die erfolgreiche Neukonfiguration war eine Abfrage erforderlich.METHOD_NOT_SUPPORTED
: Das Kameragerät unterstützt die Anfrage zur Neukonfiguration nicht.INTERNAL_ERROR
: Die Neukonfigurationsabfrage kann aufgrund eines internen Fehlers nicht abgeschlossen werden.
Die Rückgabewerte sind:
true
: Eine Neukonfiguration des Streams ist erforderlich.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 eines Sitzungsparameters eine Neukonfiguration des Streams ausgelöst wird.
Zertifizierungsstufe
Die Abfragefunktion zur Sitzungsneukonfiguration kann mit dem VTS-Testfall in CameraHidlTest#configureStreamsWithSessionParameters
validiert werden.