vr_module Odniesienie do struktury
#include < vr.h >
Pola danych | |
struktura hw_module_t | wspólny |
próżnia(* | init )(struktura vr_module *moduł) |
próżnia(* | set_vr_mode )(struct vr_module *moduł, bool włączony) |
próżnia * | zarezerwowane [8-2] |
szczegółowy opis
Zaimplementuj tę warstwę HAL, aby otrzymywać wywołania zwrotne, gdy używana jest aplikacja rzeczywistości wirtualnej (VR). Aplikacje VR charakteryzują się szeregiem specjalnych wymagań dotyczących wyświetlania i wydajności, w tym:
- Niskie opóźnienie czujnika — całkowite opóźnienie między IMU, akcelerometrem i żyroskopem a wywołaniem zwrotnym widocznym dla aplikacji musi być wyjątkowo niskie (zwykle < 5 ms). Jest to wymagane do obsługi czujnika HIFI.
- Niskie opóźnienie wyświetlania — całkowite opóźnienie między wywołaniami rysowania GPU a rzeczywistą aktualizacją wyświetlacza musi być możliwie najniższe. Osiąga się to poprzez użycie SurfaceFlingera w trybie pojedynczego bufora i zapewnienie, że wywołania rysowania są prawidłowo zsynchronizowane ze skanowaniem wyświetlacza. To zachowanie jest ujawniane poprzez rozszerzenie EGL w aplikacjach. Poniżej znajdziesz potrzebne do tego rozszerzenia EGL.
- Wyświetlacz o niskiej trwałości — ustawienia trwałości wyświetlania muszą być ustawione na możliwie najniższym poziomie, przy jednoczesnym zachowaniu rozsądnej jasności. W przypadku typowego wyświetlacza pracującego z częstotliwością 60 Hz piksele powinny świecić przez <= 3,5 ms, aby można je było uznać za mało trwałe. Pozwala to uniknąć efektu ducha podczas ruchów w ustawieniu VR i powinno być włączone z poziomu świateł.h HAL, gdy ustawiono BRIGHTNESS_MODE_LOW_PERSISTENCE.
- Stała wydajność procesora graficznego i procesora — w przypadku mieszanego obciążenia procesora graficznego/procesora dla aplikacji VR z seriami pracy w regularnych odstępach czasu, kilka razy na klatkę, planowanie procesora powinno zapewniać spójne działanie wątku renderowania aplikacji w ciągu 1 ms od momentu zaplanowane i zakończone przed końcem okna losowania. W tym celu pojedynczy rdzeń procesora musi być zarezerwowany wyłącznie dla wątku renderowania aktualnie uruchomionej aplikacji VR w trybie VR i udostępniony w zestawie procesora „najwyższej aplikacji”. Podobnie należy zachować odpowiednią częstotliwość taktowania procesora, procesora graficznego i magistrali, aby zapewnić zakończenie renderowania w czasie przeznaczonym na renderowanie każdej klatki, gdy flaga POWER_HINT_SUSTAINED_PERFORMANCE została ustawiona w power.h HAL w trybie VR, gdy urządzenie jest nie jest dławiony termicznie.
- Muszą być obecne wymagane rozszerzenia EGL — wymagane są wszelkie ustawienia GPU wymagane do umożliwienia powyższych możliwości, 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 termiczne — dokładne temperatury i wartości graniczne muszą być zgłaszane w Thermal.h HAL. W szczególności należy dokładnie podać aktualną temperaturę skóry dla DEVICE_TEMPERATURE_SKIN, a parametr vr_throttling_threshold zgłoszony dla tego urządzenia musi dokładnie podawać limit temperatury, powyżej którego regulator termiczny urządzenia ogranicza częstotliwość taktowania procesora, karty graficznej i/lub magistrali poniżej minimum niezbędnego do zapewnienia stałej wydajności ( patrz poprzedni podpunkt).
Ogólnie rzecz biorąc, oczekuje się, że dostawcy wdrażający tę warstwę HAL będą używać set_vr_mode jako wskazówki umożliwiającej dostrojenie wydajności specyficznej dla VR potrzebnej do spełnienia któregokolwiek z powyższych wymagań oraz włączenie dowolnych funkcji urządzenia optymalnych dla trybów wyświetlania VR. Wywołanie set_vr_mode może po prostu nic nie zrobić, jeśli nie są dostępne żadne optymalizacje lub są one konieczne do spełnienia powyższych wymagań.
Żadne metody w tej warstwie HAL nie będą wywoływane jednocześnie ze środowiska Android.
Dokumentacja terenowa
struktura hw_module_t wspólna |
Typowe metody modułu. Musi to być pierwszy element vr_module , ponieważ użytkownicy tej struktury mogą rzutować hw_module_t na wskaźnik vr_module w kontekstach, w których wiadomo, że hw_module_t odwołuje się do vr_module .
void(* init)(struct vr_module *moduł) |
void(* set_vr_mode)(struct vr_module *moduł, bool włączony) |
Ustaw stan trybu VR. Możliwe stany włączonego parametru to: false - tryb VR jest wyłączony, wyłącz wszystkie ustawienia specyficzne dla VR. true - tryb VR jest włączony, włącz wszystkie ustawienia specyficzne dla VR.
Jest to wywoływane za każdym razem, gdy system Android wchodzi lub wychodzi z trybu VR. Zwykle ma to miejsce, gdy użytkownik przełącza się do lub z aplikacji VR, która wykonuje renderowanie stereoskopowe.
Dokumentacja tej struktury została wygenerowana z następującego pliku:
- hardware/libhardware/include/hardware/ vr.h