Die Funktion für Sitzungsparameter reduziert Verzögerungen, da Kamera-Clients die Teilmenge der kostspieligen Anfrageparameter, d. h. Sitzungsparameter, während der Initialisierungsphase der Aufnahmesitzung aktiv konfigurieren können. Mit dieser Funktion erhalten Ihre HAL-Implementierungen die Clientparameter während der Streamkonfigurationsphase anstelle der ersten Erfassungsanfrage und können je nach ihren Werten die interne Pipeline effizienter vorbereiten und erstellen.
In Android 10 können Sie die Leistung verbessern, indem Sie die optionale Funktion zum Abfragen der Sitzungsrekonfiguration verwenden, um mehr Kontrolle über die interne Logik zur Rekonfiguration von Sitzungsparametern zu erhalten. Weitere Informationen finden Sie unter Anfrage zur Neukonfiguration der Sitzung.
Beispiele und Quelle
Eine Implementierung des Referenzsitzungsparameters ist bereits Teil der CameraHal. Diese HAL verwendet die Legacy-HAL-API. Die binderisierte CameraHal, die die Kamera-HIDL-API implementiert, muss den entsprechenden HIDL-Eintrag sessionParams> verwenden, um während der Streamkonfiguration auf neue eingehende Sitzungsparameter zuzugreifen.
Kameraclienten können die Schlüssel aller unterstützten Sitzungsparameter abfragen, indem sie getAvailableSessionKeys()
aufrufen, und schließlich ihre Anfangswerte über setSessionParameters()
festlegen.
Implementierung
Ihre CameraHal-Implementierung muss ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
in den entsprechenden statischen Kamerametadaten enthalten und eine Teilmenge von ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
bereitstellen, die eine Liste von Schlüsseln enthält, die pro Frame schwer anzuwenden sind und bei Änderung während der Aufnahme 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 Steuerung von Sitzungsparametern ist weiterhin in Erfassungsanfragen möglich. Clients sollten jedoch mit Verzögerungen in ihrer App rechnen.
Das Framework überwacht alle eingehenden Anfragen. Wenn es eine Änderung des Werts eines Sitzungsparameters erkennt, wird die Kamera intern neu konfiguriert. Die neue Streamkonfiguration, die an CameraHal übergeben wird, enthält dann die aktualisierten Sitzungsparameterwerte, die zur effizienteren Konfiguration der Kamerapipeline verwendet werden.
Personalisierung
Sie können Tags in der verfügbaren Sitzungsparameterliste definieren, die auf der CameraHal-Seite gefüllt wird. Diese Funktion ist nicht aktiv, wenn CameraHal die Liste der verfügbaren Sitzungsparameter leer lässt.
Zertifizierungsstufe
Das CTS enthält die folgenden neuen Testläufe für Sitzungsparameter:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Wenn ein bestimmter Parameter Teil der Sitzungsschlüsselliste ist, wird sein aktueller Wert in der Regel als Teil der Sitzungsparameter aufgenommen, die während der Streamkonfiguration auf der HAL-Ebene übergeben werden.
Sitzungsparameter müssen sorgfältig ausgewählt werden. Die Werte sollten sich zwischen den Streamkonfigurationen nicht häufig ändern. Parameter, die sich häufig ändern, z. B. die Erfassungsabsicht, sind nicht geeignet. Wenn Sie sie der Liste der Sitzungsparameter hinzufügen, kann dies aufgrund einer übermäßigen internen Neukonfiguration zu CTS-Fehlern führen.
Sitzung – Anfrage zur Neukonfiguration
Mit Android 10 wird eine optionale Funktion zum Abfragen der Sitzungsrekonfiguration eingeführt, um die Leistung zu verbessern. Interne Stream-Rekonfigurationen, die sich aus Änderungen an Sitzungsparameterwerten ergeben, können die Leistung beeinträchtigen. Um diesem Problem entgegenzuwirken, unterstützt HIDL ICameraDeviceSession
ab Version 3.5 die Methode isReconfigurationRequired
, die eine detaillierte Steuerung der internen Logik zur Neukonfiguration von Sitzungsparametern ermöglicht. Mit dieser Methode kann die Stream-Rekonfiguration genau dann erfolgen, wenn sie erforderlich ist.
Die Argumente für isReconfigurationRequired
enthalten die erforderlichen Informationen zu jeder ausstehenden Änderung des Sitzungsparameters und ermöglichen verschiedene gerätespezifische Anpassungen.
Diese Funktion wird nur im Kameradienst und in der Kamera-HAL implementiert. Es gibt keine öffentlich zugänglichen APIs. Wenn diese Funktion implementiert ist, sollten Kamera-Clients eine Leistungssteigerung bei der Arbeit mit Sitzungsparametern feststellen.
Implementierung
Zur Unterstützung von Anfragen zur Neukonfiguration von Sitzungen müssen Sie 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 beworbenen Sitzungsparameters ändert, ruft das Kamera-Framework die Methode isReconfigurationRequired
auf. Abhängig von den spezifischen Werten entscheidet das HAL, ob eine vollständige Stream-Neukonfiguration erforderlich ist. Wenn das HAL false
zurückgibt, überspringt das Kamera-Framework die interne Neukonfiguration. Wenn das HAL true
zurückgibt, konfiguriert das Framework die Streams neu und übergibt die neuen Sitzungsparameterwerte entsprechend.
Die Methode isReconfigurationRequired
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 das 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 darf es beim normalen Kamerastreaming keine Störungen oder Verzögerungen geben.
Das Gerät und die HAL-Implementierung müssen die folgenden Leistungsanforderungen erfüllen:
- Die Hardware- und Softwareeinstellungen der Kamera dürfen nicht geändert werden.
- Die Kamera darf keine sichtbaren Leistungseinbußen aufweisen.
Für die Methode isReconfigurationRequired
werden die folgenden Argumente verwendet:
oldSessionParams
: Sitzungsparameter aus der vorherigen Sitzung. In der Regel die vorhandenen Sitzungsparameter.newSessionParams
: Neue Sitzungsparameter, die vom Client festgelegt werden.
Die erwarteten Rückgabestatuscodes sind:
OK
: Erfolgreiche Neukonfiguration erforderlich.METHOD_NOT_SUPPORTED
: Das Kameragerät unterstützt die Reconfiguration-Anfrage nicht.INTERNAL_ERROR
: Die Anfrage zur Neukonfiguration kann aufgrund eines internen Fehlers nicht abgeschlossen werden.
Die Rückgabewerte sind:
true
: Eine Stream-Neukonfiguration ist erforderlich.false
: Eine Stream-Neukonfiguration ist nicht erforderlich.
Wenn eine Anfrage zur Neukonfiguration einer Sitzung ignoriert werden soll, gibt das HAL METHOD_NOT_SUPPORTED
oder false
zurück. Dies führt zum Standardverhalten des Kameradienstes, bei dem die Stream-Rekonfiguration bei jeder Änderung des Sitzungsparameters ausgelöst wird.
Zertifizierungsstufe
Die Funktion zum Neukonfigurieren von Sitzungen kann mit dem VTS-Testlauf in CameraHidlTest#configureStreamsWithSessionParameters
validiert werden.