Hi — follow-up on VPU for the QCS6490 (cross-link from the Video acceleration on QCS6490 thread). After switching the UEFI hypervisor override off, the VPU now comes up cleanly on my Dragon Q6A and I can use the V4L2 M2M
codecs. While validating 60fps/4K playback I found the VPU firmware ships well short of the QCS6490’s VPU4 spec on the HEVC path. Reporting with a measured capability matrix and repro steps.
Board / setup
- Radxa Dragon Q6A (QCS6490), RadxaOS (Ubuntu 24.04 noble)
- Kernel
7.0.11-6-qcom— VPU driverqcom-iris(/dev/video0qcom-iris-decoder,/dev/video1qcom-iris-encoder) - VPU firmware:
linux-firmware-dragonwing 20260613—/lib/firmware/qcom/vpu-2.0/vpu20_1v.mbn(theqcom/vpu/vpu20_p1_gen2_s6.mbnpath is a symlink chain into it) - SPI NOR firmware:
6.0.260120.BOOT.MXF.1.0.1-00549-KODIAKWP-1 ffmpeg 6.1.1-3ubuntu5, decode viah264_v4l2m2m/hevc_v4l2m2m- UEFI
HypervisorOverride= 0 (off) — required for the VPU firmware download to succeed
What I found
1. 10-bit HEVC (Main10) is rejected at every resolution/framerate. The VPU session opens, but zero frames are ever produced:
$ ffmpeg -c:v hevc_v4l2m2m -i t10_108030.mp4 -f null -
frame= 0 ... [vist#0:0/hevc @ ...] Decode error rate 1 exceeds maximum 0.666667
[out#0/null @ ...] Output file is empty, nothing was encoded
Conversion failed! (exit 69)
Tested 10-bit 1080p30 and 10-bit 720p60 — both fail identically. So this is not resolution- or rate-dependent: the firmware simply does not accept Main10 input at all.
2. 8-bit HEVC 1080p60 and 4K60 hang. Session opens, no frames, no ffmpeg error — until killed. Kernel log:
qcom-iris aa00000.video-codec: session error received 0x1000005: unknown
3. 8-bit H.264 is fine, including 4K60.
4. Real-world impact: a 10-bit HEVC 1080p59.94 capture (e.g. a ~55 Mbps 1080p60 10-bit log file, AAC 48k stereo) cannot be played at all through the VPU. A one-time CPU transcode to H.264 8-bit (libx264 CRF 18, ~2 min for 10 s on the A78 cores) makes it play
perfectly: full-file VPU decode at 1.09× real-time with audio in sync.
Measured capability matrix (all via *_v4l2m2m on this board)
| codec | 720p60 | 1080p30 | 1080p60 | 4K30 | 4K60 |
|---|---|---|---|---|---|
| H.264 8-bit | ✓ | ✓ | ✓ 5.7× | ✓ | ✓ 1.5× |
| HEVC 8-bit | ✓ 9.7× | ✓ 9.0× | ✗ hang | ✓ 2.6× | ✗ hang |
| HEVC 10-bit | ✗ 0 frames | ✗ 0 frames | ✗ | — | — |
(8-bit HEVC 1280×720 at 5/15/30 fps also fails for encode, but that’s the encoder table, separate from these decode findings.)
The QCS6490 (SM7325) VPU4 is specced for HEVC Main10 up to 4K60 / 8K30, so both gaps are on the firmware/driver side, not the silicon.
Repro
# 10-bit HEVC 1080p30 -> expect: frame= 0, "Decode error rate 1 exceeds maximum 0.666667"
ffmpeg -f lavfi -i testsrc2=duration=1:size=1920x1080:rate=30 \
-c:v libx265 -preset ultrafast -pix_fmt yuv420p10 -y t10.mp4
ffmpeg -c:v hevc_v4l2m2m -i t10.mp4 -f null -
# 8-bit HEVC 1080p60 -> expect: no output, hang; dmesg: session error 0x1000005
ffmpeg -f lavfi -i testsrc2=duration=1:size=1920x1080:rate=60 \
-c:v libx265 -preset ultrafast -pix_fmt yuv420p -y t8.mp4
timeout 30 ffmpeg -c:v hevc_v4l2m2m -i t8.mp4 -f null - ; dmesg | tail
Questions
- Is
vpu20_1v.mbn(linux-firmware-dragonwing 20260613) the final VPU firmware for the QCS6490, or is a newer snapshot planned? - Is HEVC Main10 expected on this platform at all — in a future blob, or 8-bit-only by design?
- Is the 8-bit HEVC 1080p60/4K60 hang a known issue? Any workaround (profile/level caps, driver option) besides transcoding?
Note: this report was prepared with AI assistance; all measurements above were taken on the hardware and are reproducible with the commands provided.