Sitzungsparameter

Die Sitzungsparameter-Funktion reduziert Verzögerungen, indem Kamera-Clients in die Lage versetzt werden, die Teilmenge kostspieliger 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 Logik zur Neukonfiguration der internen Sitzungsparameter zu erhalten. Weitere Informationen finden Sie unter Abfrage zur Sitzungsneukonfiguration .

Beispiele und Quelle

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

Kamera-Clients können die Schlüssel aller unterstützten Sitzungsparameter abfragen, indem sie getAvailableSessionKeys() aufrufen und schließlich ihre Anfangswerte über setSessionParameters() .

Implementierung

Ihre CameraHal-Implementierung muss die ANDROID_REQUEST_AVAILABLE_SESSION_KEYS in den entsprechenden statischen Kamerametadaten auffüllen und eine Teilmenge von ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS , die eine Liste von Schlüsseln enthält, die pro Frame schwer anzuwenden sind und zu unerwarteten Verzögerungen führen können, wenn sie während der Lebensdauer der Aufnahmesitzung geändert werden.

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

Das Framework überwacht alle eingehenden Anfragen und wenn es eine Änderung im Wert eines Sitzungsparameters erkennt, konfiguriert es die Kamera intern neu. Die an CameraHal übergebene neue Stream-Konfiguration enthält dann die aktualisierten Sitzungsparameterwerte, die verwendet werden, um die Kamera-Pipeline effizienter zu konfigurieren.

Anpassung

Sie können Tags in der verfügbaren Sitzungsparameterliste 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:

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

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

Abfrage zur Sitzungsneukonfiguration

Android 10 führt eine optionale Abfragefunktion zur Sitzungsneukonfiguration ein, um die Leistung zu verbessern, da interne Stream-Neukonfigurationen, die sich aus Änderungen des Sitzungsparameterwerts ergeben, die Leistung verringern können. Um dieses Problem zu beheben, unterstützt HIDL ICameraDeviceSession Version 3.5 und höher die isReconfigurationRequired -Methode, die eine feinkörnige Kontrolle über die Rekonfigurationslogik der internen Sitzungsparameter bietet. Mit dieser Methode kann die Stream-Rekonfiguration 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 verschiedene Arten von gerätespezifischen Anpassungen.

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

Implementierung

Um Abfragen zur Sitzungsneukonfiguration zu unterstützen, müssen Sie die isReconfigurationRequired Methode 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 isReconfigurationRequired Methode auf. Abhängig von den spezifischen Werten entscheidet der HAL, ob eine vollständige Stream-Rekonfiguration 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 isReconfigurationRequired Methode 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 isReconfigurationRequired Methode jederzeit nach der aktiven Sitzungskonfiguration aufzurufen.
  • Es darf keine Auswirkung auf die Leistung ausstehender Kameraanfragen geben. Insbesondere dürfen beim normalen Kamera-Streaming keine Störungen oder Verzögerungen auftreten.

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

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

Die Methode isReconfigurationRequired 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 : Abfrage für erfolgreiche Neukonfiguration erforderlich.
  • 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 : 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 die Stream-Neukonfiguration bei jeder Änderung der Sitzungsparameter ausgelöst wird.

Validierung

Die Abfragefunktion zur Sitzungsneukonfiguration kann mit dem VTS-Testfall in CameraHidlTest#configureStreamsWithSessionParameters validiert werden.