Using AImageEReaderDecoder in Quest2 and other openxr android device resulted in cxrError_Frame_Not_Ready issues

I am currently working on a cloudxr demo based on the openxr environment on an Android device. During testing, I found that after a few minutes of normal stream transmission, there is a problem of not being able to obtain the image (cxrLattchFrame will keep returning cxrError_Frame_Not_Ready). At present, it has been found that the problem is roughly related to the setting of cxrDebugFlags_EnableAImageReaderDecoder in the debugFlags setting when creating cxrReceiverDesc. This issue exists in our Android devices and the official demo of Oculus when setting up AImageReaderDecoder。
1.Operating system
Win11
2.GPU model
RTX 3050
3.NVIDIA graphics driver version
566.14
4.Headsest/Device used
quest2,spacexr
5.Steps to reproduce the issue
Open SteamVR on the computer, and then open the official Android demo on Quest 2 machine (note that you need to add cxrDebugFlags_EnableAImageReaderDecoder). At this time, the screen will be transmitted normally, ensuring that the helmet is on your hand or head to avoid disconnection when placed on a desk. After about 10 to 15 minutes, the frame rate(fps) will suddenly drop to 2, and cxrLatchFrame will not be able to obtain frame data
6.Log files with verbose mode enabled from the client and server
Client_All.txt (20.4 MB)

Oooph, that’s frustrating.

Just so I’m clear: To repro the problem, you:

  1. Enable AImageReaderDecoder in a Quest 2
  2. Connect a client to a SteamVR server
  3. Launch an application
  4. Run it for 10-15 minutes, keeping the headset awake

What VR/XR application are you running? (If you can’t provide specifics, then is it running one of the major game engines and at what version?
Also, I’m not familiar with “spacexr” in the context you used it; what does that refer to?

Note: the log file you provided is not one I can do much with. It seems to be an Android logcat output. That said, I’d like to have a clearer picture of what you’re doing before trying to debug specific logs.

The OculusVR Android project provided by your SDK can reproduce this issue on Quest 2 machines.
The Android project path is CloudXR-SDK\Client\Sample\Android\OculusVR

this is android streamer log
Streamer Client Log 2024-11-18 09.44.04.txt (377.4 KB)

Can you confirm that my description of the repro steps is correct?

  1. Enable AImageReaderDecoder in a Quest 2
  2. Connect a client to a SteamVR server
  3. Launch an application
  4. Run it for 10-15 minutes, keeping the headset awake

And what application are you running on the server side? Is it just the StreamVR mountains, or are you running some specific application when this happens?

The steps described are correct and may be reproduced in less than 10 minutes.
The server only opened StreamVR Mountain.

The system version of Quest 2 is shown in the following image:

Quick update: This is one of several issues with AImageReader that we are currently actively investigating. We hope to get to the bottom of it soon.

This issue was reported by several people, including me, over two and a half years ago:

It happens 100% of the time, in two different, completely independent implementations, from CloudXR 3.2, 4.0, and 4.01 using OpenXR runtimes. And it typically only takes about 5 minutes before it bugs out.