A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release
en lugar de aosp-main
para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Referencia de la estructura vr_module
#include <
vr.h
>
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.
Definición en la línea
82
del archivo
vr.h
.
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
.
Definición en la línea
89
del archivo
vr.h
.
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.
Definición en la línea
96
del archivo
vr.h
.
Definición en la línea
110
del archivo
vr.h
.
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.
Definición en la línea
107
del archivo
vr.h
.
La documentación de esta struct se generó a partir del siguiente archivo:
-
hardware/libhardware/include/hardware/
vr.h
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-26 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-07-26 (UTC)"],[],[],null,["# Android Hardware Abstraction Layer: vr_module Struct Reference\n\nvr_module Struct Reference\n==========================\n\n[Data Fields](#pub-attribs) \nvr_module Struct Reference \n\n`\n#include \u003c\n`[vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)`\n\u003e\n`\n\n|----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Data Fields ----------- ||\n| struct [hw_module_t](/reference/hal/structhw__module__t) | [common](/reference/hal/structvr__module#a71ea01183b3998cad6a2301a37a42fc7) |\n| ||\n| void(\\* | [init](/reference/hal/structvr__module#a1621887a15b003a1ba7be81d52b0abb0) )(struct [vr_module](/reference/hal/structvr__module) \\*module) |\n| ||\n| void(\\* | [set_vr_mode](/reference/hal/structvr__module#a8c9e8990b6b65b068703cd615be68fb5) )(struct [vr_module](/reference/hal/structvr__module) \\*module, bool enabled) |\n| ||\n| void \\* | [reserved](/reference/hal/structvr__module#aa1a42885ba14c2168dc14d3f219b5e99) \\[8-2\\] |\n| ||\n\n\nDetailed Description\n--------------------\n\n\nImplement this HAL to receive callbacks when a virtual reality (VR) application is being used. VR applications characteristically have a number of special display and performance requirements, including:\n\n- Low sensor latency - Total end-to-end latency from the IMU, accelerometer, and gyro to an application-visible callback must be extremely low (\\\u003c5ms typically). This is required for HIFI sensor support.\n- Low display latency - Total end-to-end latency from the GPU draw calls to the actual display update must be as low as possible. This is achieved by using SurfaceFlinger in a single-buffered mode, and assuring that draw calls are synchronized with the display scanout correctly. This behavior is exposed via an EGL extension to applications. See below for the EGL extensions needed for this.\n- Low-persistence display - Display persistence settings must be set as low as possible while still maintaining a reasonable brightness. For a typical display running at 60Hz, pixels should be illuminated for \\\u003c=3.5ms to be considered low-persistence. This avoids ghosting during movements in a VR setting, and should be enabled from the [lights.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/lights.h) HAL when BRIGHTNESS_MODE_LOW_PERSISTENCE is set.\n- Consistent performance of the GPU and CPU - When given a mixed GPU/CPU workload for a VR application with bursts of work at regular intervals several times a frame, the CPU scheduling should ensure that the application render thread work is run consistently within 1ms of when scheduled, and completed before the end of the draw window. To this end, a single CPU core must be reserved for solely for the currently running VR application's render thread while in VR mode, and made available in the \"top-app\" cpuset. Likewise, an appropriate CPU, GPU, and bus clockrate must be maintained to ensure that the rendering workload finishes within the time allotted to render each frame when the POWER_HINT_SUSTAINED_PERFORMANCE flag has been set in the [power.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/power.h) HAL while in VR mode when the device is not being thermally throttled.\n- Required EGL extensions must be present - Any GPU settings required to allow the above capabilities are required, including the EGL extensions: 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, and EGL_KHR_wait_sync.\n- Accurate thermal reporting - Accurate thermal temperatures and limits must be reported in the [thermal.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/thermal.h) HAL. Specifically, the current skin temperature must accurately be reported for DEVICE_TEMPERATURE_SKIN and the vr_throttling_threshold reported for this device must accurately report the temperature limit above which the device's thermal governor throttles the CPU, GPU, and/or bus clockrates below the minimum necessary for consistent performance (see previous bullet point).\n\n\nIn general, vendors implementing this HAL are expected to use set_vr_mode as a hint to enable VR-specific performance tuning needed for any of the above requirements, and to turn on any device features optimal for VR display modes. The set_vr_mode call may simply do nothing if no optimizations are available or necessary to meet the above requirements.\n\n\nNo methods in this HAL will be called concurrently from the Android framework.\n\n\nDefinition at line\n[82](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\nof file\n[vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\n.\n\nField Documentation\n-------------------\n\n\n|-----------------------------------------------------------------|\n| struct [hw_module_t](/reference/hal/structhw__module__t) common |\n\n\nCommon methods of the module. This\n*must*\nbe the first member of\n[vr_module](/reference/hal/structvr__module)\nas users of this structure may cast a\n[hw_module_t](/reference/hal/structhw__module__t)\nto a\n[vr_module](/reference/hal/structvr__module)\npointer in contexts where it's known that the\n[hw_module_t](/reference/hal/structhw__module__t)\nreferences a\n[vr_module](/reference/hal/structvr__module)\n.\n\n\nDefinition at line\n[89](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\nof file\n[vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\n.\n\n|-----------------------------------------------------------------------------|\n| void(\\* init)(struct [vr_module](/reference/hal/structvr__module) \\*module) |\n\n\nConvenience method for the HAL implementation to set up any state needed at runtime startup. This is called once from the VrManagerService during its boot phase. No methods from this HAL will be called before init.\n\n\nDefinition at line\n[96](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\nof file\n[vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\n.\n\n|------------------------|\n| void\\* reserved\\[8-2\\] |\n\n\nDefinition at line\n[110](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\nof file\n[vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\n.\n\n|--------------------------------------------------------------------------------------------------|\n| void(\\* set_vr_mode)(struct [vr_module](/reference/hal/structvr__module) \\*module, bool enabled) |\n\n\nSet the VR mode state. Possible states of the enabled parameter are: false - VR mode is disabled, turn off all VR-specific settings. true - VR mode is enabled, turn on all VR-specific settings.\n\n\nThis is called whenever the the Android system enters or leaves VR mode. This will typically occur when the user switches to or from a VR application that is doing stereoscopic rendering.\n\n\nDefinition at line\n[107](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\nof file\n[vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)\n.\n\n*** ** * ** ***\n\nThe documentation for this struct was generated from the following file:\n\n- hardware/libhardware/include/hardware/ [vr.h](https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/vr.h)"]]