Referencia de la estructura vr_module
#include <
vr.h
>
Campos de datos |
|
struct hw_module_t | común |
void(* | init )(struct vr_module *module) |
void(* | set_vr_mode )(struct vr_module *module, bool enabled) |
void * | reservado [8-2] |
Descripción detallada
Implementa este HAL para recibir devoluciones de llamada cuando se usa una aplicación de realidad virtual (RV). Por lo general, las aplicaciones de RV tienen una serie de requisitos especiales de visualización y rendimiento, incluidos los siguientes:
- Latencia del sensor baja: La latencia total de extremo a extremo de la IMU, el acelerómetro y el giroscopio hasta una devolución de llamada visible para la aplicación debe ser extremadamente baja (por lo general, inferior a 5 ms). Esto es necesario para admitir sensores HIFI.
- Latencia de pantalla baja: La latencia total de extremo a extremo desde las llamadas de dibujo de la GPU hasta la actualización real de la pantalla debe ser lo más baja posible. Esto se logra usando SurfaceFlinger en un modo de búfer único y asegurándose de que las llamadas de dibujo se sincronicen correctamente con el barrido de la pantalla. Este comportamiento se expone a las aplicaciones a través de una extensión de EGL. Consulta a continuación las extensiones de EGL necesarias para esto.
- Pantalla de baja persistencia: La configuración de persistencia de la pantalla debe establecerse lo más baja posible y, al mismo tiempo, mantener un brillo razonable. En el caso de una pantalla típica que se ejecuta a 60 Hz, los píxeles deben iluminarse durante un período inferior o igual a 3.5 ms para que se consideren de baja persistencia. Esto evita los efectos fantasma durante los movimientos en un entorno de VR y se debe habilitar desde el HAL de lights.h cuando se establece BRIGHTNESS_MODE_LOW_PERSISTENCE.
- Rendimiento coherente de la GPU y la CPU: Cuando se proporciona una carga de trabajo mixta de GPU/CPU para una aplicación de VR con ráfagas de trabajo a intervalos regulares varias veces por fotograma, la programación de la CPU debe garantizar que el trabajo del subproceso de renderización de la aplicación se ejecute de manera coherente en un plazo de 1 ms desde el momento en que se programó y se complete antes de que finalice la ventana de dibujo. Para ello, se debe reservar un solo núcleo de CPU solo para el subproceso de renderización de la aplicación de RV que se está ejecutando en el modo de RV y ponerlo a disposición en el conjunto de CPU "top-app". Del mismo modo, se debe mantener una velocidad de reloj adecuada de la CPU, la GPU y el bus para garantizar que la carga de trabajo de renderización finalice dentro del tiempo asignado para renderizar cada fotograma cuando se haya establecido la marca POWER_HINT_SUSTAINED_PERFORMANCE en el HAL de power.h mientras el dispositivo no esté limitado térmicamente.
- Se deben incluir las extensiones de EGL obligatorias: Cualquier configuración de GPU necesaria para permitir las capacidades anteriores, incluidas las extensiones de 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 y EGL_KHR_wait_sync.
- Informes térmicos precisos: Se deben informar temperaturas y límites térmicos precisos en el HAL thermal.h . Específicamente, la temperatura de la piel actual se debe informar con precisión para DEVICE_TEMPERATURE_SKIN y el vr_throttling_threshold informado para este dispositivo debe informar con precisión el límite de temperatura por encima del cual el regulador térmico del dispositivo limita la CPU, la GPU o las velocidades de reloj del bus por debajo del mínimo necesario para un rendimiento coherente (consulta el punto anterior).
En general, se espera que los proveedores que implementen este HAL usen set_vr_mode como una sugerencia para habilitar el ajuste de rendimiento específico de la realidad virtual necesario para cualquiera de los requisitos anteriores y para activar las funciones del dispositivo óptimas para los modos de visualización de realidad virtual. Es posible que la llamada set_vr_mode no haga nada si no hay optimizaciones disponibles o necesarias para cumplir con los requisitos anteriores.
No se llamará a ningún método de este HAL de forma simultánea desde el framework de Android.
Documentación de campos
struct hw_module_t común |
Métodos comunes del módulo. Este debe ser el primer miembro de vr_module , ya que los usuarios de esta estructura pueden transmitir un hw_module_t a un puntero vr_module en contextos en los que se sabe que hw_module_t hace referencia a un vr_module .
void(* init)(struct vr_module *module) |
Es un método conveniente para la implementación de HAL que configura cualquier estado necesario durante el inicio del entorno de ejecución. Se llama una vez desde VrManagerService durante su fase de inicio. No se llamará a ningún método de este HAL antes de la inicialización.
void(* set_vr_mode)(struct vr_module *module, bool enabled) |
Establece el estado del modo VR. Los posibles estados del parámetro habilitado son los siguientes: "false": El modo de RV está inhabilitado. Desactiva toda la configuración específica de la RV. "true": El modo de RV está habilitado. Activa toda la configuración específica de la RV.
Se llama cada vez que el sistema Android entra o sale del modo VR. Por lo general, esto ocurrirá cuando el usuario cambie a una aplicación de RV que esté realizando una renderización estereoscópica o salga de ella.
La documentación de esta struct se generó a partir del siguiente archivo:
- hardware/libhardware/include/hardware/ vr.h