vr_module-Strukturreferenz

vr_module-Strukturreferenz

#include < vr.h >

Datenfelder

struct hw_module_t   common
 
void(*  init )(struct vr_module *module)
 
void(*  set_vr_mode )(struct vr_module *module, bool enabled)
 
void *  reserved [8-2]
 

Detaillierte Beschreibung

Implementieren Sie diese HAL, um Rückrufe zu erhalten, wenn eine Virtual-Reality-Anwendung (VR) verwendet wird. VR-Anwendungen haben in der Regel eine Reihe spezieller Anzeige- und Leistungsanforderungen, darunter:

  • Niedrige Sensorlatenz: Die gesamte End-to-End-Latenz von der IMU, dem Beschleunigungsmesser und dem Gyroskop bis zu einem sichtbare Callback in der Anwendung muss extrem niedrig sein (normalerweise unter 5 ms). Dies ist für die Unterstützung von HIFI-Sensoren erforderlich.
  • Niedrige Displaylatenz: Die Gesamtlatenz von den GPU-Zeichneraufrufen bis zur tatsächlichen Displayaktualisierung muss so niedrig wie möglich sein. Dazu wird SurfaceFlinger im Single-Buffer-Modus verwendet und dafür gesorgt, dass die Zeichenaufrufe korrekt mit dem Display-Scanout synchronisiert werden. Dieses Verhalten wird über eine EGL-Erweiterung für Anwendungen bereitgestellt. Unten finden Sie die erforderlichen EGL-Erweiterungen.
  • Display mit geringer Nachleuchtzeit: Die Einstellungen für die Nachleuchtzeit des Displays müssen so niedrig wie möglich sein, um eine angemessene Helligkeit zu gewährleisten. Bei einem typischen Display mit 60 Hz sollten die Pixel maximal 3,5 ms lang beleuchtet werden, um als Display mit geringer Nachleuchtzeit zu gelten. Dadurch wird verhindert, dass bei Bewegungen in einer VR-Umgebung Ghosting auftritt. Die Funktion sollte über die HAL-Datei lights.h aktiviert werden, wenn BRIGHTNESS_MODE_LOW_PERSISTENCE festgelegt ist.
  • Gleichbleibende Leistung von GPU und CPU: Bei einer gemischten GPU-/CPU-Arbeitslast für eine VR-Anwendung mit Arbeitsspitzen in regelmäßigen Abständen mehrmals pro Frame sollte die CPU-Planung dafür sorgen, dass die Arbeit des Anwendungs-Render-Threads innerhalb von 1 ms nach der Planung konsistent ausgeführt und vor dem Ende des Zeichenfensters abgeschlossen wird. Dazu muss im VR-Modus ein einzelner CPU-Kern ausschließlich für den Render-Thread der aktuell ausgeführten VR-Anwendung reserviert und in der CPU-Gruppe „top-app“ verfügbar gemacht werden. Ebenso muss eine geeignete CPU-, GPU- und Bustaktrate beibehalten werden, damit die Rendering-Arbeitslast innerhalb der Zeit abgeschlossen wird, die für das Rendern jedes Frames vorgesehen ist, wenn das Flag POWER_HINT_SUSTAINED_PERFORMANCE in der HAL-Datei power.h im VR-Modus gesetzt ist und das Gerät nicht thermisch gedrosselt wird.
  • Erforderliche EGL-Erweiterungen müssen vorhanden sein: Alle GPU-Einstellungen, die für die oben genannten Funktionen erforderlich sind, 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 Temperaturberichte: In der HAL-Datei thermal.h müssen genaue Temperaturen und Grenzwerte angegeben werden. Insbesondere muss die aktuelle Hauttemperatur für DEVICE_TEMPERATURE_SKIN korrekt angegeben werden und der für dieses Gerät gemeldete Wert für „vr_throttling_threshold“ muss das Temperaturlimit korrekt angeben, über dem der Temperaturregler des Geräts die CPU-, GPU- und/oder Bustaktraten unter das Minimum senkt, das für eine gleichbleibende Leistung erforderlich ist (siehe vorheriger Aufzählungspunkt).

Generell wird von Anbietern, die diese HAL implementieren, erwartet, dass sie „set_vr_mode“ als Hinweis verwenden, um die VR-spezifische Leistungsoptimierung zu aktivieren, die für eine der oben genannten Anforderungen erforderlich ist, und alle Gerätefunktionen zu aktivieren, die für VR-Anzeigemodi optimal sind. Der Aufruf von „set_vr_mode“ führt möglicherweise zu keiner Aktion, 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. Dieser muss das erste Mitglied von vr_module sein, da Nutzer dieser Struktur einen hw_module_t in einen vr_module -Pointer umwandeln können, wenn bekannt ist, dass hw_module_t auf ein vr_module verweist.

Definition in Zeile 89 der Datei vr.h

void(* init)(struct vr_module *module)

Diese praktische Methode für die HAL-Implementierung dient zum Einrichten des Zustands, der beim Starten der Laufzeit erforderlich ist. Diese Methode wird während der Bootphase einmal vom VrManagerService aufgerufen. Vor der Initialisierung werden keine Methoden aus dieser HAL aufgerufen.

Definition in Zeile 96 der Datei vr.h

void* reserved[8-2]

Definition in Zeile 110 der Datei vr.h .

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

Legen Sie den Status des VR-Modus fest. Mögliche Status des Parameters „enabled“ sind: „false“ – VR-Modus deaktiviert, alle VR-spezifischen Einstellungen deaktiviert. „true“ – VR-Modus aktiviert, alle VR-spezifischen Einstellungen aktiviert.

Diese Funktion wird immer dann aufgerufen, wenn das Android-System in den VR-Modus wechselt oder ihn verlässt. Das tritt in der Regel auf, wenn der Nutzer zu oder von einer VR-Anwendung wechselt, die ein stereoskopisches Rendering verwendet.

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