vr_module-Strukturreferenz

vr_module-Strukturreferenz

#include < vr.h >

Datenfelder

Struktur hw_module_t gemeinsam
Leere(* init )(struct vr_module *module)
Leere(* set_vr_mode )(struct vr_module *module, bool aktiviert)
Leere * reserviert [8-2]

detaillierte Beschreibung

Implementieren Sie diese HAL, um Rückrufe zu empfangen, wenn eine Virtual-Reality-Anwendung (VR) verwendet wird. VR-Anwendungen stellen typischerweise eine Reihe besonderer Anzeige- und Leistungsanforderungen, darunter:

  • Geringe Sensorlatenz – Die gesamte End-to-End-Latenz von der IMU, dem Beschleunigungsmesser und dem Kreisel bis zu einem für die Anwendung sichtbaren Rückruf muss extrem niedrig sein (normalerweise <5 ms). Dies ist für die Unterstützung von HIFI-Sensoren erforderlich.
  • Geringe Anzeigelatenz – Die gesamte End-to-End-Latenz von den GPU-Draw-Aufrufen bis zur tatsächlichen Anzeigeaktualisierung muss so gering wie möglich sein. Dies wird erreicht, indem SurfaceFlinger in einem Einzelpuffermodus verwendet wird und sichergestellt wird, dass Zeichenaufrufe korrekt mit dem Display-Scanout synchronisiert werden. Dieses Verhalten wird über eine EGL-Erweiterung für Anwendungen offengelegt. Nachfolgend finden Sie die dafür erforderlichen EGL-Erweiterungen.
  • Anzeige mit geringer Nachleuchtdauer: Die Einstellungen für die Nachleuchtdauer der Anzeige müssen so niedrig wie möglich eingestellt werden, wobei dennoch eine angemessene Helligkeit erhalten bleibt. Bei einem typischen Display mit 60 Hz sollten die Pixel weniger als 3,5 ms lang beleuchtet sein, um als geringe Nachleuchtdauer zu gelten. Dies vermeidet Geisterbilder bei Bewegungen in einer VR-Einstellung und sollte über die Lights.h HAL aktiviert werden, wenn BRIGHTNESS_MODE_LOW_PERSISTENCE eingestellt ist.
  • Konsistente Leistung der GPU und CPU – Bei einer gemischten GPU/CPU-Arbeitslast für eine VR-Anwendung mit Arbeitsstößen in regelmäßigen Abständen mehrmals pro Frame sollte die CPU-Planung sicherstellen, dass die Render-Thread-Arbeit der Anwendung innerhalb von 1 ms konsistent ausgeführt wird geplant und vor dem Ende des Ziehungsfensters abgeschlossen. Zu diesem Zweck muss ein einzelner CPU-Kern ausschließlich für den Render-Thread der aktuell ausgeführten VR-Anwendung im VR-Modus reserviert und im „Top-App“-CPU-Satz verfügbar gemacht werden. Ebenso muss eine angemessene CPU-, GPU- und Bus-Taktrate aufrechterhalten werden, um sicherzustellen, dass die Rendering-Arbeitslast innerhalb der für das Rendern jedes Frames vorgesehenen Zeit abgeschlossen ist, wenn das Flag POWER_HINT_SUSTAINED_PERFORMANCE in der power.h- HAL gesetzt wurde, während sich das Gerät im VR-Modus befindet thermisch nicht gedrosselt wird.
  • Erforderliche EGL-Erweiterungen müssen vorhanden sein – Alle GPU-Einstellungen, die zum Ermöglichen der oben genannten Funktionen erforderlich sind, sind erforderlich, einschließlich der EGL-Erweiterungen: EGL_ANDROID_create_native_client_buffer, EGL_ANDROID_front_buffer_auto_refresh, EGL_EXT_protected_content, EGL_KHR_mutable_render_buffer, EGL_KHR_reusable_sync und EGL_KHR_wait_sync.
  • Genaue thermische Berichterstattung – Genaue thermische Temperaturen und Grenzwerte müssen im Thermal.h HAL gemeldet werden. Insbesondere muss die aktuelle Hauttemperatur für DEVICE_TEMPERATURE_SKIN genau gemeldet werden und der für dieses Gerät gemeldete vr_throttling_threshold muss genau die Temperaturgrenze angeben, bei deren Überschreitung der Wärmeregler des Geräts die CPU-, GPU- und/oder Bustaktraten unter das für eine konsistente Leistung erforderliche Minimum drosselt ( siehe vorherigen Aufzählungspunkt).

Im Allgemeinen wird von Anbietern, die diesen HAL implementieren, erwartet, dass sie set_vr_mode als Hinweis verwenden, um die für die oben genannten Anforderungen erforderliche VR-spezifische Leistungsoptimierung zu ermöglichen und alle Gerätefunktionen zu aktivieren, die für VR-Anzeigemodi optimal sind. Der Aufruf set_vr_mode führt möglicherweise einfach nichts aus, wenn keine Optimierungen verfügbar oder erforderlich sind, um die oben genannten Anforderungen zu erfüllen.

Keine Methoden in dieser HAL werden gleichzeitig vom Android-Framework aufgerufen.

Definition in Zeile 82 der Datei vr.h .

Felddokumentation

struct hw_module_t common

Gängige Methoden des Moduls. Dies muss das erste Mitglied von vr_module sein, da Benutzer dieser Struktur in Kontexten, in denen bekannt ist, dass hw_module_t auf ein vr_module verweist, einen hw_module_t in einen vr_module- Zeiger umwandeln können.

Definition in Zeile 89 der Datei vr.h .

void(* init)(struct vr_module *module)

Praktische Methode für die HAL-Implementierung, um jeden Status einzurichten, der beim Start der Laufzeit benötigt wird. Dies wird während der Startphase einmal vom VrManagerService aufgerufen. Vor init werden keine Methoden aus dieser HAL aufgerufen.

Definition in Zeile 96 der Datei vr.h .

void* reserviert[8-2]

Definition in Zeile 110 der Datei vr.h .

void(* set_vr_mode)(struct vr_module *module, bool aktiviert)

Stellen Sie den VR-Modusstatus ein. Mögliche Zustände des aktivierten Parameters sind: false – VR-Modus ist deaktiviert, alle VR-spezifischen Einstellungen deaktivieren. true – Der VR-Modus ist aktiviert. Aktivieren Sie alle VR-spezifischen Einstellungen.

Dies wird immer dann aufgerufen, wenn das Android-System in den VR-Modus wechselt oder diesen verlässt. Dies geschieht typischerweise, wenn der Benutzer zu oder von einer VR-Anwendung wechselt, die stereoskopisches Rendering durchführt.

Definition in Zeile 107 der Datei vr.h .


Die Dokumentation für diese Struktur wurde aus der folgenden Datei generiert:
  • hardware/libhardware/include/hardware/ vr.h