Sitzungsparameter

Die Sitzungsparameterfunktion reduziert Verzögerungen, indem sie es Kamera-Clients ermöglicht, die Teilmenge der kostspieligen Anforderungsparameter, d. h. Sitzungsparameter, als Teil der Initialisierungsphase der Aufnahmesitzung aktiv zu konfigurieren. Mit dieser Funktion erhalten Ihre HAL-Implementierungen die Client-Parameter während der Stream-Konfigurationsphase anstelle der ersten Erfassungsanforderung und können abhängig von ihren Werten die interne Pipeline effizienter vorbereiten und aufbauen.

In Android 10 können Sie die Leistung verbessern, indem Sie die optionale Abfragefunktion zur Sitzungsneukonfiguration verwenden, um mehr Kontrolle über die interne Sitzungsparameter-Neukonfigurationslogik zu erhalten. Weitere Informationen finden Sie unter Sitzungsrekonfigurationsabfrage .

Beispiele und Quelle

Eine Referenzsitzungsparameterimplementierung ist bereits Teil von CameraHal . Dieses HAL verwendet die alte Hal-API. Der gebundene CameraHal, der die Kamera-HIDL-API implementiert, muss den entsprechenden HIDL- sessionParams- Eintrag verwenden, um während der Stream-Konfiguration auf alle neuen eingehenden Sitzungsparameter zuzugreifen.

Kamera-Clients können die Schlüssel aller unterstützten Sitzungsparameter durch Aufruf von getAvailableSessionKeys() abfragen und schließlich ihre Anfangswerte über setSessionParameters() festlegen.

Implementierung

Ihre CameraHal-Implementierung muss ANDROID_REQUEST_AVAILABLE_SESSION_KEYS in den jeweiligen statischen Kamerametadaten füllen und eine Teilmenge von ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS bereitstellen, die eine Liste von Schlüsseln enthält, die pro Frame nur schwer anzuwenden sind und bei Änderungen während der Lebensdauer der Aufnahmesitzung zu unerwarteten Verzögerungen führen können.

Typische Beispiele sind Parameter, die eine zeitaufwändige Hardware-Neukonfiguration oder eine interne Änderung der Kamera-Pipeline erfordern. Die Kontrolle über Sitzungsparameter kann weiterhin in Erfassungsanfragen ausgeübt werden, aber Kunden sollten sich der Verzögerungen in ihrer Anwendung bewusst sein und damit rechnen.

Das Framework überwacht alle eingehenden Anfragen und konfiguriert die Kamera intern neu, wenn es eine Änderung des Werts eines Sitzungsparameters erkennt. Die an CameraHal übergebene neue Stream-Konfiguration enthält dann die aktualisierten Sitzungsparameterwerte, die zur effizienteren Konfiguration der Kamera-Pipeline verwendet werden.

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:

Im Allgemeinen wird, nachdem ein bestimmter Parameter Teil der Sitzungsschlüsselliste ist, sein aktueller Wert als Teil der Sitzungsparameter aufgenommen, die während der Stream-Konfiguration auf der HAL-Ebene übergeben werden.

Sitzungsparameter müssen sorgfältig ausgewählt werden. Die Werte sollten sich zwischen Stream-Konfigurationen, wenn überhaupt, nicht häufig ändern. Parameter, die sich häufig ändern, wie z. B. die Erfassungsabsicht, sind ungeeignet und das Hinzufügen dieser Parameter zur Sitzungsparameterliste könnte aufgrund übermäßiger interner Neukonfiguration zu CTS-Fehlern führen.

Abfrage zur Sitzungsneukonfiguration

Android 10 führt eine optionale Abfragefunktion zur Sitzungsneukonfiguration ein, um die Leistung zu verbessern, da interne Stream-Neukonfigurationen aufgrund von Änderungen der Sitzungsparameterwerte die Leistung beeinträchtigen können. Um dieses Problem zu lösen, unterstützt HIDL ICameraDeviceSession Version 3.5 und höher die Methode isReconfigurationRequired , die eine differenzierte Steuerung der internen Sitzungsparameter-Neukonfigurationslogik bietet. Mit dieser Methode kann die Stream-Neukonfiguration genau dann erfolgen, wenn es erforderlich ist.

Die Argumente für isReconfigurationRequired stellen die erforderlichen Informationen zu jeder ausstehenden Sitzungsparameteränderung bereit und ermöglichen so verschiedene Arten gerätespezifischer Anpassungen.

Diese Funktion ist nur im Kameradienst und im Kamera-HAL implementiert. Es gibt keine öffentlich zugänglichen APIs. Wenn diese Funktion implementiert ist, sollten Kamera-Clients Leistungsverbesserungen beim Arbeiten mit Sitzungsparametern feststellen.

Implementierung

Um Abfragen zur Sitzungsneukonfiguration zu unterstützen, müssen Sie die Methode isReconfigurationRequired implementieren, um zu prüfen, ob für neue Sitzungsparameterwerte eine vollständige Stream-Neukonfiguration erforderlich ist.

Wenn der Client den Wert eines angekündigten Sitzungsparameters ändert, ruft das Kamera-Framework die Methode isReconfigurationRequired auf. Abhängig von den spezifischen Werten entscheidet der HAL, ob eine vollständige Stream-Neukonfiguration erforderlich ist. Wenn der 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 der Übermittlung einer Anforderung mit neuen Parametern an die HAL aufgerufen werden, und die Anforderung kann vor der Übermittlung 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 in der Lage sein, die Methode isReconfigurationRequired jederzeit nach der aktiven Sitzungskonfiguration aufzurufen.
  • Es darf keine Auswirkung auf die Leistung ausstehender Kameraanfragen geben. Insbesondere darf es beim normalen Kamera-Streaming nicht zu Störungen oder Verzögerungen kommen.

Das Gerät und die HAL-Implementierung müssen die folgenden Leistungsanforderungen erfüllen:

  • Hardware- und Softwareeinstellungen der Kamera dürfen nicht geändert werden.
  • Es darf keine für den Benutzer sichtbare Auswirkung auf die Kameraleistung geben.

Die isReconfigurationRequired Methode akzeptiert die folgenden Argumente:

  • oldSessionParams : Sitzungsparameter der vorherigen Sitzung. Normalerweise die vorhandenen Sitzungsparameter.
  • newSessionParams : Neue Sitzungsparameter, die vom Client festgelegt werden.

Die erwarteten Rückgabestatuscodes sind:

  • OK : Erfolgreiche Neukonfiguration erforderlich. Abfrage.
  • METHOD_NOT_SUPPORTED : Das Kameragerät unterstützt die Neukonfigurationsabfrage nicht.
  • INTERNAL_ERROR : Die Neukonfigurationsabfrage 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.

Um eine Sitzungsneukonfigurationsabfrage zu ignorieren, gibt die HAL METHOD_NOT_SUPPORTED oder false zurück. Dies führt zum Standardverhalten des Kameradienstes, bei dem bei jeder Sitzungsparameteränderung eine Stream-Neukonfiguration ausgelöst wird.

Validierung

Die Sitzungsrekonfigurationsabfragefunktion kann mithilfe des VTS-Testfalls in CameraHidlTest#configureStreamsWithSessionParameters validiert werden.