moonlight-stream / moonlight-stream/moonlight-android
[Issue]: Moonlight cannot find hardware accelerated video codecs
Nobody has claimed this yet.
- Dominant language
- C
- Stars
- 7.1k
- Forks
- 1.5k
- PR merge metrics
- No merged PRs in 30d
Description
Describe the bug
About a month ago I stopped being able to use Moonlight on my Poco X3 Pro running crDroid 11.2 (Android 15). The issue I get is a black screen with a popup that says "This device or ROM doesn't support hardware accelerated H.264 playback.". It used to work just fine before.
I recently noticed an update for my ROM that happened around the time when I started having this issue that says "Removed deprecated OMX and replaced with c2 media codecs". Checking the Moonlight logs I notice a peculiar line that says "Examining decoder capabilities of c2.android.avc.decoder (round 1)" and then "Skipping software-only decoder: c2.android.avc.decoder", so I was wondering if it's possible that Moonlight thinks this decoder is software-only when it's actually a usable hardware codec on my device.
I've already checked the basic troubleshooting guide to no avail, and I've recently asked for help on the Discord server, but nobody was able to figure out what was going on.
Steps to reproduce
- Run Moonlight on a Poco X3 Pro running the latest crDroid 11.2 ROM
- Pair a device running Sunshine
- Try to connect to the device
Affected games
Any
Other Moonlight clients
PC
Moonlight adjusted settings
Yes
Moonlight adjusted settings (please complete the following information)
Video frame balancing was set on "Prefer lower delays"
Moonlight default settings
Yes
Gamepad-related connection issue
No
Gamepad-related input issue
No
Gamepad-related streaming issue
Yes
Android version
Android 15
Device model
Poco X3 Pro
Server PC OS version
Windows 10 22H2
Server PC GeForce Experience version
Sunshine v2025.122.141614
Server PC Nvidia GPU driver version
572.83
Server PC antivirus and firewall software
Windows Defender and Windows Firewall
Screenshots
Relevant log output
--- Moonlight log ---
03-17 19:07:11.028 7103 7103 I com.limelight.LimeLog: Timing out polled state for [redacted]
03-17 19:07:11.035 7103 12300 I com.limelight.LimeLog: NSD: Service discovery started
03-17 19:07:11.038 7103 13632 I com.limelight.LimeLog: Starting parallel poll for [redacted]
03-17 19:07:11.059 7103 12300 I com.limelight.LimeLog: NSD: Machine appeared: [redacted]
03-17 19:07:11.073 7103 12322 I com.limelight.LimeLog: mDNS: [redacted] has 1 IPv4 addresses
03-17 19:07:11.073 7103 12322 I com.limelight.LimeLog: mDNS: [redacted] has 3 IPv6 addresses
03-17 19:07:11.074 7103 12322 I com.limelight.LimeLog: Found link-local address: [redacted]
03-17 19:07:11.074 7103 12322 I com.limelight.LimeLog: Ignoring non-matching global address: [redacted]
03-17 19:07:11.074 7103 12322 I com.limelight.LimeLog: Ignoring non-matching global address: [redacted]
03-17 19:07:11.075 7103 12322 I com.limelight.LimeLog: Ignoring non-global address: [redacted]
03-17 19:07:11.128 7103 13633 I com.limelight.LimeLog: Parallel poll for [redacted] returned address: [redacted]
03-17 19:07:12.634 7103 13633 I com.limelight.LimeLog: Starting parallel poll for [redacted]
03-17 19:07:12.751 7103 13633 I com.limelight.LimeLog: Parallel poll for [redacted] returned address: [redacted]
03-17 19:07:13.132 7103 12300 I com.limelight.LimeLog: NSD: Service discovery stopped
03-17 19:07:13.228 7103 7103 I com.limelight.LimeLog: Using Android O+ native mouse capture
03-17 19:07:13.236 7103 7103 I com.limelight.LimeLog: Examining decoder capabilities of c2.android.avc.decoder (round 1)
03-17 19:07:13.236 7103 7103 I com.limelight.LimeLog: Skipping software-only decoder: c2.android.avc.decoder
03-17 19:07:13.236 7103 7103 I com.limelight.LimeLog: Examining decoder capabilities of c2.android.avc.decoder (round 2)
03-17 19:07:13.237 7103 7103 I com.limelight.LimeLog: Skipping software-only decoder: c2.android.avc.decoder
03-17 19:07:13.237 7103 7103 I com.limelight.LimeLog: Skipping software-only decoder: c2.android.avc.decoder
03-17 19:07:13.237 7103 7103 W com.limelight.LimeLog: No AVC decoder found
03-17 19:07:13.237 7103 7103 I com.limelight.LimeLog: Examining decoder capabilities of c2.qti.hevc.decoder (round 1)
03-17 19:07:13.237 7103 7103 I com.limelight.LimeLog: Skipping decoder that lacks FEATURE_LowLatency for round 1
03-17 19:07:13.238 7103 7103 I com.limelight.LimeLog: Examining decoder capabilities of c2.android.hevc.decoder (round 1)
03-17 19:07:13.238 7103 7103 I com.limelight.LimeLog: Skipping software-only decoder: c2.android.hevc.decoder
03-17 19:07:13.238 7103 7103 I com.limelight.LimeLog: Examining decoder capabilities of c2.qti.hevc.decoder (round 2)
03-17 19:07:13.238 7103 7103 I com.limelight.LimeLog: Media performance class: 30
03-17 19:07:13.239 7103 7103 I com.limelight.LimeLog: Selected HEVC decoder: c2.qti.hevc.decoder
03-17 19:07:13.239 7103 7103 I com.limelight.LimeLog: No AV1 decoder found
03-17 19:07:13.268 7103 7103 I com.limelight.LimeLog: Decoder c2.qti.hevc.decoder will use reference frame invalidation for HEVC
03-17 19:07:13.268 7103 7103 I com.limelight.LimeLog: Decoder c2.qti.hevc.decoder wants 1 slices per frame
03-17 19:07:13.269 7103 7103 I com.limelight.LimeLog: Requesting 1 slices per frame
03-17 19:07:13.273 7103 7103 I com.limelight.LimeLog: Enumerated 0 gamepads
03-17 19:07:13.274 7103 7103 I com.limelight.LimeLog: Current display mode: 1080x2400x120.00001
03-17 19:07:13.274 7103 7103 I com.limelight.LimeLog: Examining display mode: 1080x2400x120.00001
03-17 19:07:13.274 7103 7103 I com.limelight.LimeLog: Examining display mode: 1080x2400x90.0
03-17 19:07:13.275 7103 7103 I com.limelight.LimeLog: Examining display mode: 1080x2400x60.000004
03-17 19:07:13.275 7103 7103 I com.limelight.LimeLog: Examining display mode: 1080x2400x50.0
03-17 19:07:13.276 7103 7103 I com.limelight.LimeLog: Examining display mode: 1080x2400x48.000004
03-17 19:07:13.276 7103 7103 I com.limelight.LimeLog: Examining display mode: 1080x2400x30.000002
03-17 19:07:13.276 7103 7103 I com.limelight.LimeLog: Best display mode: 1080x2400x120.00001
03-17 19:07:13.276 7103 7103 I com.limelight.LimeLog: Current display mode is already the best display mode
03-17 19:07:13.277 7103 7103 I com.limelight.LimeLog: Display refresh rate: 120.00001
03-17 19:07:13.288 7103 7103 I com.limelight.LimeLog: Enumerated 0 gamepads
--- codecs from aida64 ---
<<< Codec >>>
c2.android.aac.decoder: audio/mp4a-latm
OMX.google.aac.decoder: audio/mp4a-latm
c2.android.aac.encoder: audio/mp4a-latm
OMX.google.aac.encoder: audio/mp4a-latm
c2.android.amrnb.decoder: audio/3gpp
OMX.google.amrnb.decoder: audio/3gpp
c2.android.amrnb.encoder: audio/3gpp
OMX.google.amrnb.encoder: audio/3gpp
c2.android.amrwb.decoder: audio/amr-wb
OMX.google.amrwb.decoder: audio/amr-wb
c2.android.amrwb.encoder: audio/amr-wb
OMX.google.amrwb.encoder: audio/amr-wb
c2.android.flac.decoder: audio/flac
OMX.google.flac.decoder: audio/flac
c2.android.flac.encoder: audio/flac
OMX.google.flac.encoder: audio/flac
c2.android.g711.alaw.decoder: audio/g711-alaw
OMX.google.g711.alaw.decoder: audio/g711-alaw
c2.android.g711.mlaw.decoder: audio/g711-mlaw
OMX.google.g711.mlaw.decoder: audio/g711-mlaw
c2.android.mp3.decoder: audio/mpeg
OMX.google.mp3.decoder: audio/mpeg
c2.android.opus.decoder: audio/opus
OMX.google.opus.decoder: audio/opus
c2.android.opus.encoder: audio/opus
c2.android.raw.decoder: audio/raw
OMX.google.raw.decoder: audio/raw
c2.android.vorbis.decoder: audio/vorbis
OMX.google.vorbis.decoder: audio/vorbis
c2.qti.avc.encoder: video/avc
OMX.qcom.video.encoder.avc: video/avc
c2.qti.heic.encoder: image/vnd.android.heic
c2.qti.hevc.decoder: video/hevc
OMX.qcom.video.decoder.hevc: video/hevc
c2.qti.hevc.encoder: video/hevc
OMX.qcom.video.encoder.hevc: video/hevc
c2.qti.hevc.encoder.cq: video/hevc
c2.qti.vp8.decoder: video/x-vnd.on2.vp8
OMX.qcom.video.decoder.vp8: video/x-vnd.on2.vp8
c2.qti.vp8.encoder: video/x-vnd.on2.vp8
OMX.qcom.video.encoder.vp8: video/x-vnd.on2.vp8
c2.qti.vp9.decoder: video/x-vnd.on2.vp9
OMX.qcom.video.decoder.vp9: video/x-vnd.on2.vp9
c2.android.av1-dav1d.decoder: video/av01
c2.android.av1.encoder: video/av01
c2.android.avc.decoder: video/avc
OMX.google.h264.decoder: video/avc
c2.android.avc.encoder: video/avc
OMX.google.h264.encoder: video/avc
c2.android.h263.decoder: video/3gpp
OMX.google.h263.decoder: video/3gpp
c2.android.h263.encoder: video/3gpp
OMX.google.h263.encoder: video/3gpp
c2.android.hevc.decoder: video/hevc
OMX.google.hevc.decoder: video/hevc
c2.android.hevc.encoder: video/hevc
c2.android.mpeg4.decoder: video/mp4v-es
OMX.google.mpeg4.decoder: video/mp4v-es
c2.android.mpeg4.encoder: video/mp4v-es
OMX.google.mpeg4.encoder: video/mp4v-es
c2.android.vp8.decoder: video/x-vnd.on2.vp8
OMX.google.vp8.decoder: video/x-vnd.on2.vp8
c2.android.vp8.encoder: video/x-vnd.on2.vp8
OMX.google.vp8.encoder: video/x-vnd.on2.vp8
c2.android.vp9.decoder: video/x-vnd.on2.vp9
OMX.google.vp9.decoder: video/x-vnd.on2.vp9
c2.android.vp9.encoder: video/x-vnd.on2.vp9
OMX.google.vp9.encoder: video/x-vnd.on2.vp9
c2.android.av1.decoder: video/av01
Additional context
No response
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by tracing the Android decoder capability check that emits the reported c2.android.avc.decoder and FEATURE_LowLatency log messages. Compare how the c2 and OMX codecs are classified on the affected device; done means AVC hardware acceleration is correctly recognized and the connection no longer reports that no AVC decoder was found.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android
- Domain
- audio-video-rtc, mobile-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100