Die Funktion für Sitzungsparameter reduziert Verzögerungen, da Kameraparameter die Teilmenge der kostspieligen Anfrageparameter, d. h. 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 Aufnahme-Anfrage 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 für die Abfrage zur Neukonfiguration von Sitzungen verwenden, um die interne Logik zur Neukonfiguration von Sitzungsparametern besser zu steuern. Weitere Informationen finden Sie unter Abfrage zur Neukonfiguration von Sitzungen.
Beispiele und Quelle
Eine Referenzimplementierung für Sitzungsparameter ist bereits Teil von dem CameraHal. Diese HAL verwendet die Legacy-HAL-API. Die binderisierte CameraHal, die die Camera-HIDL-API implementiert, muss den entsprechenden HIDL sessionParams Eintrag verwenden, um während der Streamkonfiguration auf neue eingehende Sitzungsparameter zuzugreifen.
Kameraparameter können die Schlüssel aller unterstützten Sitzungsparameter mit
getAvailableSessionKeys()
abfragen und ihre Anfangswerte mit
setSessionParameters()festlegen.
Implementierung
Ihre CameraHal-Implementierung muss die
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
in den entsprechenden statischen Kamerametadaten ausfüllen und eine Teilmenge von
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYSbereitstellen.
Diese enthält eine Liste von Schlüsseln, die pro Frame schwer anzuwenden sind und bei Änderung während der Lebensdauer 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 Sitzungsparameter können weiterhin in Aufnahme-Anfragen gesteuert werden, aber Clients sollten mit Verzögerungen in ihrer App rechnen.
Das Framework überwacht alle eingehenden Anfragen und konfiguriert die Kamera intern neu, wenn eine Änderung des Werts eines Sitzungsparameters erkannt wird. Die neue Streamkonfiguration, die an CameraHal übergeben wird, enthält dann die aktualisierten Sitzungsparameterwerte, mit denen die Kamerapipeline effizienter konfiguriert werden kann.
Anpassung
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.
Validierung
CTS enthält die folgenden neuen Fälle zum Testen von Sitzungsparametern:
CameraDeviceTest#testSessionConfigurationCameraDeviceTest#testCreateSessionWithParametersCameraDeviceTest#testSessionParametersStateLeakNativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Wenn ein bestimmter Parameter Teil der Liste der Sitzungsschlüssel ist, wird sein aktueller Wert 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 Aufnahmeabsicht, sind ungeeignet. Wenn Sie sie der Liste der Sitzungsparameter hinzufügen, kann dies aufgrund einer übermäßigen internen Neukonfiguration zu CTS-Fehlern führen.
Abfrage zur Neukonfiguration von Sitzungen
In Android 10 wird eine optionale Funktion für die Abfrage zur Neukonfiguration von Sitzungen eingeführt, um die Leistung zu verbessern, da interne Stream-Neukonfigurationen, die durch Änderungen der Sitzungsparameterwerte verursacht werden, die Leistung beeinträchtigen können. Um dieses Problem zu beheben,
unterstützt HIDL
ICameraDeviceSession
Version 3.5 und höher die
isReconfigurationRequired
Methode, die eine detaillierte Steuerung der internen Logik zur Neukonfiguration von Sitzungsparametern ermöglicht. Mit dieser Methode kann die Streamkonfiguration genau dann erfolgen, wenn sie erforderlich ist.
Die Argumente für isReconfigurationRequired liefern die erforderlichen Informationen zu jeder ausstehenden Änderung der Sitzungsparameter und ermöglichen verschiedene gerätespezifische Anpassungen.
Diese Funktion wird nur im Kameradienst und in der Kamera-HAL implementiert. Es gibt keine öffentlichen APIs. Wenn diese Funktion implementiert ist, sollten Kameraparameter Leistungsverbesserungen feststellen, wenn sie mit Sitzungsparametern arbeiten.
Implementierung
Um Abfragen zur Neukonfiguration von Sitzungen zu unterstützen, müssen Sie die
isReconfigurationRequired
Methode implementieren, um zu prüfen, ob eine vollständige Streamkonfiguration für neue
Sitzungsparameterwerte erforderlich ist.
Wenn der Client den Wert eines beworbenen Sitzungsparameters ändert, ruft das Kamera-Framework die Methode isReconfigurationRequired auf. Je nach den spezifischen Werten entscheidet die HAL, ob eine vollständige Streamkonfiguration 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 ü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 die HAL diesen Methodenaufruf nicht verwenden, um ihr Verhalten in irgendeiner Weise zu ändern.
Die HAL-Implementierung muss die folgenden Anforderungen erfüllen:
- Das Framework muss die Methode
isReconfigurationRequiredjederzeit nach der aktiven Sitzungskonfiguration aufrufen können. - Die Leistung ausstehender Kamera-Anfragen darf nicht beeinträchtigt werden. Insbesondere darf es während des normalen Kamerastreamings keine Fehler oder Verzögerungen geben.
Die Geräte- und HAL-Implementierung muss die folgenden Leistungsanforderungen erfüllen:
- Die Kameraeinstellungen für Hardware und Software dürfen nicht geändert werden.
- Die Leistung der Kamera darf für Nutzer nicht sichtbar beeinträchtigt werden.
Die Methode isReconfigurationRequired verwendet die folgenden Argumente:
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 Abfrage zur Neukonfiguration erforderlich.METHOD_NOT_SUPPORTED: Das Kameragerät unterstützt die Abfrage zur Neukonfiguration nicht.INTERNAL_ERROR: Die Abfrage zur Neukonfiguration kann aufgrund eines internen Fehlers nicht abgeschlossen werden.
Die Rückgabewerte sind:
true: Streamkonfiguration ist erforderlich.false: Streamkonfiguration ist nicht erforderlich.
Um eine Abfrage zur Neukonfiguration von Sitzungen zu ignorieren, gibt die HAL METHOD_NOT_SUPPORTED oder false zurück. Dies führt zum Standardverhalten des Kameradienstes, bei dem die Streamkonfiguration bei jeder Änderung der Sitzungsparameter ausgelöst wird.
Validierung
Die Funktion für die Abfrage zur Neukonfiguration von Sitzungen kann mit dem VTS-Test
fall in
CameraHidlTest#configureStreamsWithSessionParameters validiert werden.