Also posted in the actively maintained Steam Link Linux forum for the Remote Play team: https://steamcommunity.com/app/353380/discussions/10/571544346711605626/
FWIW, this is relatively expected behavior (or at least, it's deeply unsurprisingly that V4L2 would break on general ARM64 systems); the ARM64 version of Steam is currently only meant specifically for the Steam Frame, and as such the streaming implementation is very specific to that platform.
Nothing extracted yet.
Your system information
178458811520260714.ec4bf0c(Fedora Linux 44, native ARM64 Steam)7.0.11(qcom_iris,/dev/video0=qcom-iris-decoder)26.1.4-1.fc44.armadasteamdeck_publicbeta~/.local/share/Steam/steamrtarm64/streaming_client, aarch64 build ID34ded2b9ba517b1313bd40a0a5e60513f8e6bb7cI understand the native ARM64 Steam client is not formally released. This report concerns its Valve-supplied native
steamrtarm64/streaming_client, specifically theCV4L2Accelpath.Please describe your issue in as much detail as possible
Remote Play connects and audio/input work, but video is solid green and Steam reports slow decoding. The host successfully encodes and forwards frames. The client repeatedly logs:
A syscall trace (
strace -ff -yy -v -s 512 -e trace=ioctl) localizes the first failure before that reported capture-bufferEINVAL:V4L2_CAP_VIDEO_M2M_MPLANE.VIDIOC_STREAMONcalls succeed.bytesused=0(1,713/1,713 in a 15-second trace).V4L2_BUF_FLAG_ERROR|V4L2_BUF_FLAG_LASTand zero bytes.typeandindexonly), producing the secondaryEINVALshown instreaming_log.txt.Representative trace excerpt:
ARM64 disassembly around the embedded diagnostic string
CV4L2Accel::BSubmitFrame()->SUBMIT queueout[%d]shows thatBSubmitFrame()obtains the packet pointer and length through its input object, callsmemcpy()with that length, stores the same length inv4l2_plane.bytesused, and then callsVIDIOC_QBUF. The supplied length is already zero, so no compressed payload is copied or submitted. The kernel cannot decode or reconstruct data it never receives. The binary embeds the source path/data/src/streaming/client/v4l2accel.cpp.The later capture QBUF
EINVALis therefore a reset-loop symptom rather than the root cause.Test matrix
CV4L2Accel./dev/video0inaccessible: V4L2 errors disappear, but no working software fallback is selected; all frames becomek_EStreamFrameResultDroppedDecodeCorruptandDecoderDescriptionIDis empty. Device permissions were immediately restored.Expected behavior
CV4L2Accelshould submit the actual compressed packet length/payload to the V4L2 OUTPUT queue.CV4L2Acceland select a working software decoder.Steps for reproducing this issue
streaming_clientioctls and observe every H.264 OUTPUT QBUF usingbytesused=0.Related downstream investigation: https://github.com/virtudude/armada/issues/138
AYN also publishes its mainline-oriented device kernel at https://github.com/AYNTechnologies/linux and lists video codec acceleration as working. That is consistent with the driver setup succeeding here; I found no AYN-specific Steam/V4L2 userspace fix.