Struktura vr_module

Struktura vr_module

#include < vr.h >

Pola danych

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

Szczegółowy opis

Zaimplementuj ten interfejs HAL, aby otrzymywać wywołania zwrotne podczas korzystania z aplikacji rzeczywistości wirtualnej (VR). Aplikacje VR mają zazwyczaj specjalne wymagania dotyczące wyświetlania i wydajności, w tym:

  • Niski czas reakcji czujników – łączny czas reakcji od czujnika IMU, akcelerometru i żyroskopu do wywołania widocznego dla aplikacji musi być bardzo krótki (zwykle poniżej 5 ms). Jest to wymagane do obsługi czujnika HIFI.
  • Niska latencja wyświetlania – łączna latencja od wywołania funkcji rysowania na procesorze graficznym do faktycznej aktualizacji wyświetlania musi być jak najniższa. Aby to osiągnąć, należy użyć SurfaceFlingera w trybie pojedynczego buforowania i zadbać o to, aby wywołania funkcji rysowania były prawidłowo zsynchronizowane z wyświetlaniem. To zachowanie jest udostępniane aplikacjom za pomocą rozszerzenia EGL. Poniżej znajdziesz potrzebne w tym celu rozszerzenia EGL.
  • Wyświetlacz o niskiej perzystancji – ustawienia wyświetlacza o niskiej perzystancji muszą być ustawione tak nisko, jak to możliwe, przy zachowaniu rozsądnej jasności. W przypadku typowego wyświetlacza pracującego z częstotliwością 60 Hz piksele powinny być podświetlane przez czas nie dłuższy niż 3,5 ms, aby można je było uznać za oświetlenie o niskiej trwałości. Pozwala to uniknąć efektu ghostingu podczas poruszania się w ustawieniach VR. Należy włączyć tę opcję w  lights.h HAL, gdy ustawiona jest opcja BRIGHTNESS_MODE_LOW_PERSISTENCE.
  • Stałe osiąganie wydajności przez GPU i CPU – w przypadku aplikacji VR z mieszanym obciążeniem GPU/CPU, która wykonuje zadania w regularnych odstępach czasu (kilka razy na klatkę), harmonogram procesora powinien zapewnić, aby zadania wątku renderowania aplikacji były wykonywane w ciągu 1 ms od momentu zaplanowania i były ukończone przed końcem okna rysowania. W tym celu jedno jądro procesora musi być zarezerwowane tylko dla wątku renderowania aktualnie uruchomionej aplikacji VR w trybie VR i udostępnione w ramach zestawu procesora „aplikacja na wierzchu”. Należy też zachować odpowiednią częstotliwość zegara procesora, procesora graficznego i szyny, aby mieć pewność, że renderowanie zostanie ukończone w czasie przeznaczonym na renderowanie każdej klatki, gdy w pliku HAL power.h w trybie VR, gdy urządzenie nie jest ograniczane termicznie.
  • Wymagane rozszerzenia EGL: wymagane są wszystkie ustawienia GPU umożliwiające korzystanie z wymienionych powyżej funkcji, w tym rozszerzenia EGL: 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 i EGL_KHR_wait_sync.
  • Dokładne raportowanie danych termicznych – dokładne temperatury i limity termiczne muszą być raportowane w pliku thermal.h HAL. W szczególności aktualna temperatura skóry musi być prawidłowo raportowana w przypadku DEVICE_TEMPERATURE_SKIN, a wartość vr_throttling_threshold zgłaszana przez to urządzenie musi prawidłowo raportować limit temperatury, powyżej którego regulator termiczny urządzenia ogranicza częstotliwość zegara procesora, GPU lub magistrali poniżej wartości minimalnej wymaganej do zapewnienia stabilnej wydajności (patrz poprzedni punkt).

Ogólnie rzecz biorąc, producenci wdrażający ten interfejs HAL powinni używać polecenia set_vr_mode jako wskazówki, aby włączyć optymalizację wydajności w trybie VR, która jest potrzebna do spełnienia któregokolwiek z wymienionych powyżej wymagań, oraz włączyć funkcje urządzenia, które są optymalne dla trybów wyświetlania VR. Jeśli nie ma żadnych optymalizacji lub nie są one potrzebne do spełnienia powyższych wymagań, wywołanie set_vr_mode może po prostu nic nie robić.

Żadna metoda w tym interfejsie HAL nie będzie wywoływana równolegle w ramach frameworka Androida.

Definicja w wierszu 82 pliku vr.h .

Dokumentacja pola

struct hw_module_t common

Typowe metody modułu. Ten element musi być pierwszym elementem vr_module , ponieważ użytkownicy tej struktury mogą przesyłać hw_module_t do vr_module wskaźnika w kontekstach, w których wiadomo, że hw_module_t odwołuje się do vr_module .

Definicja w wierszu 89 pliku vr.h .

void(* init)(struct vr_module *module)

Metoda ułatwiająca implementację HAL do konfigurowania stanu potrzebnego podczas uruchamiania w czasie wykonywania. Ta metoda jest wywoływana raz przez VrManagerService podczas fazy uruchamiania. Przed zainicjowaniem nie zostanie wywołana żadna metoda tego interfejsu HAL.

Definicja w wierszu 96 w pliku vr.h .

void* reserved[8-2]

Definicja w wierszu 110 w pliku vr.h .

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

Ustaw stan trybu VR. Możliwe stany parametru włączonego: false – tryb VR jest wyłączony, wyłącz wszystkie ustawienia dotyczące VR. true – tryb VR jest włączony, włącz wszystkie ustawienia dotyczące VR.

Jest on wywoływany za każdym razem, gdy system Android wchodzi w tryb VR lub z niego wychodzi. Zwykle dzieje się tak, gdy użytkownik przełącza się na aplikację VR, która wykonuje renderowanie stereoskopowe.

Definicja w wierszu 107 pliku vr.h .


Dokumentacja tego typu danych została wygenerowana z tego pliku:
  • hardware/libhardware/include/hardware/ vr.h