From ad593a7cb130513e6d434d3adcff48d8ab64808e Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 31 Mar 2024 14:45:03 +0530 Subject: [PATCH 1/7] feat: Support refreshrates other than 60 --- .../android/PhoneVR/app/src/main/cpp/alvr_main.cpp | 4 ++-- .../main/java/viritualisres/phonevr/ALVRActivity.java | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp index 49b8f685..592e9aa6 100644 --- a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp +++ b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp @@ -171,14 +171,14 @@ void inputThread() { // } extern "C" JNIEXPORT void JNICALL Java_viritualisres_phonevr_ALVRActivity_initializeNative( - JNIEnv *env, jobject obj, jint screenWidth, jint screenHeight) { + JNIEnv *env, jobject obj, jint screenWidth, jint screenHeight, jfloat refreshRate) { CTX.javaVm = jVM; CTX.javaContext = env->NewGlobalRef(obj); uint32_t viewWidth = std::max(screenWidth, screenHeight) / 2; uint32_t viewHeight = std::min(screenWidth, screenHeight); - float refreshRatesBuffer[1] = {60.f}; + float refreshRatesBuffer[1] = {refreshRate }; alvr_initialize((void *) CTX.javaVm, (void *) CTX.javaContext, diff --git a/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/ALVRActivity.java b/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/ALVRActivity.java index 3f8ca0b5..1724d0dc 100644 --- a/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/ALVRActivity.java +++ b/code/mobile/android/PhoneVR/app/src/main/java/viritualisres/phonevr/ALVRActivity.java @@ -16,6 +16,7 @@ import android.provider.Settings; import android.util.DisplayMetrics; import android.util.Log; +import android.view.Display; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; @@ -97,7 +98,12 @@ public void onCreate(Bundle savedInstance) { int width = displayMetrics.widthPixels; int height = displayMetrics.heightPixels; - initializeNative(width, height); + // get refresh rate of the device + Display display = getWindowManager().getDefaultDisplay(); + float refreshRate = display.getRefreshRate(); + Log.i(TAG, "Refresh rate: " + refreshRate); + + initializeNative(width, height, refreshRate); setContentView(R.layout.activity_vr); glView = findViewById(R.id.surface_view); @@ -248,7 +254,8 @@ private void setImmersiveSticky() { | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } - private native void initializeNative(int screenWidth, int screenHeight); + private native void initializeNative( + int screenWidth, int screenHeight, float screenRefreshRate); private native void destroyNative(); From a76cf2cf3e76e0291d5a08b936310cf097664ca4 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 31 Mar 2024 14:50:18 +0530 Subject: [PATCH 2/7] rebase --- code/mobile/android/PhoneVR/ALVR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/mobile/android/PhoneVR/ALVR b/code/mobile/android/PhoneVR/ALVR index fb73b5b9..796308e4 160000 --- a/code/mobile/android/PhoneVR/ALVR +++ b/code/mobile/android/PhoneVR/ALVR @@ -1 +1 @@ -Subproject commit fb73b5b9d1e7329a6d36c49908cd7815c2e618b7 +Subproject commit 796308e4d76a080822969488c1b047017df70f2c From 4fa95400cc117c1cf2320ee5a8ed0b08c9832ec6 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 31 Mar 2024 15:04:32 +0530 Subject: [PATCH 3/7] lint fix --- .../PhoneVR/app/src/main/cpp/alvr_main.cpp | 2 +- code/windows/PhoneVR/PhoneVR/PVRSockets.cpp | 20 ++++++++-------- code/windows/PhoneVR/PhoneVR/driver.cpp | 4 ++-- code/windows/PhoneVR/PhoneVR/openvr_driver.h | 24 +++++++++---------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp index 592e9aa6..401279ee 100644 --- a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp +++ b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp @@ -178,7 +178,7 @@ extern "C" JNIEXPORT void JNICALL Java_viritualisres_phonevr_ALVRActivity_initia uint32_t viewWidth = std::max(screenWidth, screenHeight) / 2; uint32_t viewHeight = std::min(screenWidth, screenHeight); - float refreshRatesBuffer[1] = {refreshRate }; + float refreshRatesBuffer[1] = {refreshRate}; alvr_initialize((void *) CTX.javaVm, (void *) CTX.javaContext, diff --git a/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp b/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp index f75cb3dc..41b96862 100644 --- a/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp +++ b/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp @@ -39,7 +39,7 @@ namespace { quatQueue; vector vFrames(nVFrames); - int64_t pts = 0; // in microseconds + int64_t pts = 0; // in microseconds int64_t vFrameDtUs; int whichFrame = 0; // syncronize rendering and encoding std::mutex whichFrameMtxs[nVFrames]; // if syncronization is out (cause lag) use as last @@ -274,7 +274,7 @@ void PVRStartStreamer(string ip, to_string(lastWhichFrame) + ", nVfs:" + to_string(nVFrames) + ", wF:" + to_string(whichFrame)); lastWhichFrame = whichFrame; - whichFrameMtxs[lastWhichFrame].lock(); // LOCK + whichFrameMtxs[lastWhichFrame].lock(); // LOCK auto totSz = x264_encoder_encode(enc, &nals, &nNals, &vFrames[lastWhichFrame], &outPic); whichFrameMtxs[lastWhichFrame].unlock(); // UNLOCK @@ -285,7 +285,7 @@ void PVRStartStreamer(string ip, if (totSz > 0) { PVR_DB("[PVRStartStreamer th] Rendering lWf:" + to_string(lastWhichFrame) + ", wF:" + to_string(whichFrame)); - quatQueueMutex.lock(); // LOCK + quatQueueMutex.lock(); // LOCK while ((quatQueue.size() != 0) && (quatQueue.front().first.first < outPic.i_pts)) // handle skipped frames { @@ -311,12 +311,12 @@ void PVRStartStreamer(string ip, qbuf[2] = quat.y(); qbuf[3] = quat.z(); *nbuf = totSz; - fpsbuf[0] = fpsSteamVRApp; // VRApp FPS - fpsbuf[1] = fpsEncoder; // Encoder FPS - fpsbuf[2] = fpsStreamWriter; // StreamWriter FPS - fpsbuf[3] = fpsStreamer; // Streamer FPS + fpsbuf[0] = fpsSteamVRApp; // VRApp FPS + fpsbuf[1] = fpsEncoder; // Encoder FPS + fpsbuf[2] = fpsStreamWriter; // StreamWriter FPS + fpsbuf[3] = fpsStreamer; // Streamer FPS fpsbuf[4] = fpsRenderer; - tDelaysBuf[0] = renderDur; // Renderer Delay + tDelaysBuf[0] = renderDur; // Renderer Delay tDelaysBuf[1] = (float) ((Clk::now() - time).count() / 1000000.0); // Encoder Delay *timestamp = (int64_t) duration_cast( @@ -375,14 +375,14 @@ void PVRProcessFrame(uint64_t hdl, Quaternionf quat) { pts += vFrameDtUs; - quatQueueMutex.lock(); // LOCK + quatQueueMutex.lock(); // LOCK quatQueue.push({{pts, {Clk::now(), 0}}, quat}); quatQueueMutex.unlock(); // UNLOCK // PVRUpdTexHdl() -> Blocking: This will wait if there is already a handle being rendered. PVRUpdTexHdl(hdl, newWhichFrame); // Render Frame - quatQueueMutex.lock(); // LOCK + quatQueueMutex.lock(); // LOCK quatQueue.back().first.second.second = (Clk::now() - quatQueue.back().first.second.first).count() / 1000000.0; quatQueueMutex.unlock(); // UNLOCK diff --git a/code/windows/PhoneVR/PhoneVR/driver.cpp b/code/windows/PhoneVR/PhoneVR/driver.cpp index 7dcd8a23..54d01d6d 100644 --- a/code/windows/PhoneVR/PhoneVR/driver.cpp +++ b/code/windows/PhoneVR/PhoneVR/driver.cpp @@ -21,7 +21,7 @@ class HMD : public ITrackedDeviceServerDriver, public IVRDisplayComponent, public IVRVirtualDisplay { // todo: try to remove IVRDisplayComponent - float projRect[4]; // left eye viewport, flip + float projRect[4]; // left eye viewport, flip float poseTmOffS; microseconds vstreamDT; @@ -158,7 +158,7 @@ class HMD : public ITrackedDeviceServerDriver, VRProperties()->SetBoolProperty(propCont, Prop_DeviceIsWireless_Bool, true); VRProperties()->SetBoolProperty(propCont, Prop_DeviceIsCharging_Bool, false); VRProperties()->SetFloatProperty( - propCont, Prop_DeviceBatteryPercentage_Float, 1); // TODO get from phone + propCont, Prop_DeviceBatteryPercentage_Float, 1); // TODO get from phone VRProperties()->SetBoolProperty( propCont, Prop_Firmware_UpdateAvailable_Bool, false); // TODO implement VRProperties()->SetBoolProperty(propCont, Prop_Firmware_ManualUpdate_Bool, true); diff --git a/code/windows/PhoneVR/PhoneVR/openvr_driver.h b/code/windows/PhoneVR/PhoneVR/openvr_driver.h index 67ff39d3..e3ab4d66 100644 --- a/code/windows/PhoneVR/PhoneVR/openvr_driver.h +++ b/code/windows/PhoneVR/PhoneVR/openvr_driver.h @@ -464,10 +464,10 @@ namespace vr { VREvent_WirelessDisconnect = 112, VREvent_WirelessReconnect = 113, - VREvent_ButtonPress = 200, // data is controller - VREvent_ButtonUnpress = 201, // data is controller - VREvent_ButtonTouch = 202, // data is controller - VREvent_ButtonUntouch = 203, // data is controller + VREvent_ButtonPress = 200, // data is controller + VREvent_ButtonUnpress = 201, // data is controller + VREvent_ButtonTouch = 202, // data is controller + VREvent_ButtonUntouch = 203, // data is controller VREvent_MouseMove = 300, // data is mouse VREvent_MouseButtonDown = 301, // data is mouse @@ -478,10 +478,10 @@ namespace vr { VREvent_TouchPadMove = 306, // data is mouse VREvent_OverlayFocusChanged = 307, // data is overlay, global event - VREvent_InputFocusCaptured = 400, // data is process DEPRECATED - VREvent_InputFocusReleased = 401, // data is process DEPRECATED - VREvent_SceneFocusLost = 402, // data is process - VREvent_SceneFocusGained = 403, // data is process + VREvent_InputFocusCaptured = 400, // data is process DEPRECATED + VREvent_InputFocusReleased = 401, // data is process DEPRECATED + VREvent_SceneFocusLost = 402, // data is process + VREvent_SceneFocusGained = 403, // data is process VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or // from the compositor) @@ -615,9 +615,9 @@ namespace vr { k_EDeviceActivityLevel_Unknown = -1, k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds k_EDeviceActivityLevel_UserInteraction = - 1, // Activity (movement or prox sensor) is happening now + 1, // Activity (movement or prox sensor) is happening now k_EDeviceActivityLevel_UserInteraction_Timeout = - 2, // No activity for the last 0.5 seconds + 2, // No activity for the last 0.5 seconds k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management) }; @@ -1248,8 +1248,8 @@ namespace vr { uint32_t m_nFrameSequence; // Starts from 0 when stream starts. - uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted - uint32_t m_nBufferCount; // Total number of configured buffers + uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted + uint32_t m_nBufferCount; // Total number of configured buffers uint32_t m_nExposureTime; From 93391cd115f686d647f921e63091b560d15d3763 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 31 Mar 2024 15:55:44 +0530 Subject: [PATCH 4/7] Revert "lint fix" This reverts commit 4fa95400cc117c1cf2320ee5a8ed0b08c9832ec6. --- .../PhoneVR/app/src/main/cpp/alvr_main.cpp | 2 +- code/windows/PhoneVR/PhoneVR/PVRSockets.cpp | 20 ++++++++-------- code/windows/PhoneVR/PhoneVR/driver.cpp | 4 ++-- code/windows/PhoneVR/PhoneVR/openvr_driver.h | 24 +++++++++---------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp index 401279ee..592e9aa6 100644 --- a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp +++ b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp @@ -178,7 +178,7 @@ extern "C" JNIEXPORT void JNICALL Java_viritualisres_phonevr_ALVRActivity_initia uint32_t viewWidth = std::max(screenWidth, screenHeight) / 2; uint32_t viewHeight = std::min(screenWidth, screenHeight); - float refreshRatesBuffer[1] = {refreshRate}; + float refreshRatesBuffer[1] = {refreshRate }; alvr_initialize((void *) CTX.javaVm, (void *) CTX.javaContext, diff --git a/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp b/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp index 41b96862..f75cb3dc 100644 --- a/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp +++ b/code/windows/PhoneVR/PhoneVR/PVRSockets.cpp @@ -39,7 +39,7 @@ namespace { quatQueue; vector vFrames(nVFrames); - int64_t pts = 0; // in microseconds + int64_t pts = 0; // in microseconds int64_t vFrameDtUs; int whichFrame = 0; // syncronize rendering and encoding std::mutex whichFrameMtxs[nVFrames]; // if syncronization is out (cause lag) use as last @@ -274,7 +274,7 @@ void PVRStartStreamer(string ip, to_string(lastWhichFrame) + ", nVfs:" + to_string(nVFrames) + ", wF:" + to_string(whichFrame)); lastWhichFrame = whichFrame; - whichFrameMtxs[lastWhichFrame].lock(); // LOCK + whichFrameMtxs[lastWhichFrame].lock(); // LOCK auto totSz = x264_encoder_encode(enc, &nals, &nNals, &vFrames[lastWhichFrame], &outPic); whichFrameMtxs[lastWhichFrame].unlock(); // UNLOCK @@ -285,7 +285,7 @@ void PVRStartStreamer(string ip, if (totSz > 0) { PVR_DB("[PVRStartStreamer th] Rendering lWf:" + to_string(lastWhichFrame) + ", wF:" + to_string(whichFrame)); - quatQueueMutex.lock(); // LOCK + quatQueueMutex.lock(); // LOCK while ((quatQueue.size() != 0) && (quatQueue.front().first.first < outPic.i_pts)) // handle skipped frames { @@ -311,12 +311,12 @@ void PVRStartStreamer(string ip, qbuf[2] = quat.y(); qbuf[3] = quat.z(); *nbuf = totSz; - fpsbuf[0] = fpsSteamVRApp; // VRApp FPS - fpsbuf[1] = fpsEncoder; // Encoder FPS - fpsbuf[2] = fpsStreamWriter; // StreamWriter FPS - fpsbuf[3] = fpsStreamer; // Streamer FPS + fpsbuf[0] = fpsSteamVRApp; // VRApp FPS + fpsbuf[1] = fpsEncoder; // Encoder FPS + fpsbuf[2] = fpsStreamWriter; // StreamWriter FPS + fpsbuf[3] = fpsStreamer; // Streamer FPS fpsbuf[4] = fpsRenderer; - tDelaysBuf[0] = renderDur; // Renderer Delay + tDelaysBuf[0] = renderDur; // Renderer Delay tDelaysBuf[1] = (float) ((Clk::now() - time).count() / 1000000.0); // Encoder Delay *timestamp = (int64_t) duration_cast( @@ -375,14 +375,14 @@ void PVRProcessFrame(uint64_t hdl, Quaternionf quat) { pts += vFrameDtUs; - quatQueueMutex.lock(); // LOCK + quatQueueMutex.lock(); // LOCK quatQueue.push({{pts, {Clk::now(), 0}}, quat}); quatQueueMutex.unlock(); // UNLOCK // PVRUpdTexHdl() -> Blocking: This will wait if there is already a handle being rendered. PVRUpdTexHdl(hdl, newWhichFrame); // Render Frame - quatQueueMutex.lock(); // LOCK + quatQueueMutex.lock(); // LOCK quatQueue.back().first.second.second = (Clk::now() - quatQueue.back().first.second.first).count() / 1000000.0; quatQueueMutex.unlock(); // UNLOCK diff --git a/code/windows/PhoneVR/PhoneVR/driver.cpp b/code/windows/PhoneVR/PhoneVR/driver.cpp index 54d01d6d..7dcd8a23 100644 --- a/code/windows/PhoneVR/PhoneVR/driver.cpp +++ b/code/windows/PhoneVR/PhoneVR/driver.cpp @@ -21,7 +21,7 @@ class HMD : public ITrackedDeviceServerDriver, public IVRDisplayComponent, public IVRVirtualDisplay { // todo: try to remove IVRDisplayComponent - float projRect[4]; // left eye viewport, flip + float projRect[4]; // left eye viewport, flip float poseTmOffS; microseconds vstreamDT; @@ -158,7 +158,7 @@ class HMD : public ITrackedDeviceServerDriver, VRProperties()->SetBoolProperty(propCont, Prop_DeviceIsWireless_Bool, true); VRProperties()->SetBoolProperty(propCont, Prop_DeviceIsCharging_Bool, false); VRProperties()->SetFloatProperty( - propCont, Prop_DeviceBatteryPercentage_Float, 1); // TODO get from phone + propCont, Prop_DeviceBatteryPercentage_Float, 1); // TODO get from phone VRProperties()->SetBoolProperty( propCont, Prop_Firmware_UpdateAvailable_Bool, false); // TODO implement VRProperties()->SetBoolProperty(propCont, Prop_Firmware_ManualUpdate_Bool, true); diff --git a/code/windows/PhoneVR/PhoneVR/openvr_driver.h b/code/windows/PhoneVR/PhoneVR/openvr_driver.h index e3ab4d66..67ff39d3 100644 --- a/code/windows/PhoneVR/PhoneVR/openvr_driver.h +++ b/code/windows/PhoneVR/PhoneVR/openvr_driver.h @@ -464,10 +464,10 @@ namespace vr { VREvent_WirelessDisconnect = 112, VREvent_WirelessReconnect = 113, - VREvent_ButtonPress = 200, // data is controller - VREvent_ButtonUnpress = 201, // data is controller - VREvent_ButtonTouch = 202, // data is controller - VREvent_ButtonUntouch = 203, // data is controller + VREvent_ButtonPress = 200, // data is controller + VREvent_ButtonUnpress = 201, // data is controller + VREvent_ButtonTouch = 202, // data is controller + VREvent_ButtonUntouch = 203, // data is controller VREvent_MouseMove = 300, // data is mouse VREvent_MouseButtonDown = 301, // data is mouse @@ -478,10 +478,10 @@ namespace vr { VREvent_TouchPadMove = 306, // data is mouse VREvent_OverlayFocusChanged = 307, // data is overlay, global event - VREvent_InputFocusCaptured = 400, // data is process DEPRECATED - VREvent_InputFocusReleased = 401, // data is process DEPRECATED - VREvent_SceneFocusLost = 402, // data is process - VREvent_SceneFocusGained = 403, // data is process + VREvent_InputFocusCaptured = 400, // data is process DEPRECATED + VREvent_InputFocusReleased = 401, // data is process DEPRECATED + VREvent_SceneFocusLost = 402, // data is process + VREvent_SceneFocusGained = 403, // data is process VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or // from the compositor) @@ -615,9 +615,9 @@ namespace vr { k_EDeviceActivityLevel_Unknown = -1, k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds k_EDeviceActivityLevel_UserInteraction = - 1, // Activity (movement or prox sensor) is happening now + 1, // Activity (movement or prox sensor) is happening now k_EDeviceActivityLevel_UserInteraction_Timeout = - 2, // No activity for the last 0.5 seconds + 2, // No activity for the last 0.5 seconds k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management) }; @@ -1248,8 +1248,8 @@ namespace vr { uint32_t m_nFrameSequence; // Starts from 0 when stream starts. - uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted - uint32_t m_nBufferCount; // Total number of configured buffers + uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted + uint32_t m_nBufferCount; // Total number of configured buffers uint32_t m_nExposureTime; From 346c211dedbeb86dc76107bee101e6a7b570e7fa Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 31 Mar 2024 15:56:02 +0530 Subject: [PATCH 5/7] lint errors --- code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp index 592e9aa6..401279ee 100644 --- a/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp +++ b/code/mobile/android/PhoneVR/app/src/main/cpp/alvr_main.cpp @@ -178,7 +178,7 @@ extern "C" JNIEXPORT void JNICALL Java_viritualisres_phonevr_ALVRActivity_initia uint32_t viewWidth = std::max(screenWidth, screenHeight) / 2; uint32_t viewHeight = std::min(screenWidth, screenHeight); - float refreshRatesBuffer[1] = {refreshRate }; + float refreshRatesBuffer[1] = {refreshRate}; alvr_initialize((void *) CTX.javaVm, (void *) CTX.javaContext, From 520c47460f93c8e5246a7fad8879df791cec2618 Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Sun, 31 Mar 2024 16:09:17 +0530 Subject: [PATCH 6/7] Update ALVR --- code/mobile/android/PhoneVR/ALVR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/mobile/android/PhoneVR/ALVR b/code/mobile/android/PhoneVR/ALVR index 796308e4..bef2098b 160000 --- a/code/mobile/android/PhoneVR/ALVR +++ b/code/mobile/android/PhoneVR/ALVR @@ -1 +1 @@ -Subproject commit 796308e4d76a080822969488c1b047017df70f2c +Subproject commit bef2098bf9572d15a552d123f48575ce4f2f64c2 From a9f4a590664f03cd4704917f82f491eced29800a Mon Sep 17 00:00:00 2001 From: Harsha Raghu Date: Fri, 5 Apr 2024 19:42:50 +0530 Subject: [PATCH 7/7] Update ALVR to v20.6.2 --- code/mobile/android/PhoneVR/ALVR | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/mobile/android/PhoneVR/ALVR b/code/mobile/android/PhoneVR/ALVR index bef2098b..fb73b5b9 160000 --- a/code/mobile/android/PhoneVR/ALVR +++ b/code/mobile/android/PhoneVR/ALVR @@ -1 +1 @@ -Subproject commit bef2098bf9572d15a552d123f48575ce4f2f64c2 +Subproject commit fb73b5b9d1e7329a6d36c49908cd7815c2e618b7