Repository navigation
Preserve the render pose while reusing Quest video - #43
Merged
demonixis merged 3 commits intoOct 4, 2026
Merged
Conversation
Owner
|
Thanks for this PR. Please resolve the conflict and I'll merge it |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem and change
While reusing a decoded frame, the Quest client stops using that frame's render pose after 120 ms, even though it keeps showing the same pixels for up to two seconds. Projection submission then uses the current headset pose, making the held image head-locked.
Keep the held frame's render pose throughout its existing display lifetime. This removes the 120 ms pose cutoff and its unused age calculation. Reprojection-off and missing-pose behavior, the two-second disconnect, and the separate short-lived shader-warp limits retain their existing behavior.
Validation
assembleDebug assembleRelease, arm64-v8a, Java 17, NDK 28.2.13676358, CMake 3.22.1.UpdateReprojectionWarp()is byte-for-byte unchanged.Reproduce the isolated checks
The standalone reproducer is kept on a separate fork branch so these small fixes do not introduce an Android mocking framework into the runtime suite. It compiles the actual affected function/branch bodies with fake Android APIs and a controlled clock under ASan/UBSan. It does not execute MediaCodec, GLES, or an OpenXR headset.
After downloading the script outside the checkout, run from this PR branch:
Base checked:
developatf72f2b20dd0c9e5a4c0b43ca7f9b0f65704aa1e6. The affected Android source files are identical onunstableata93418fea5f523107057c1903c6fe753d89da839.