Description
The Anthias update (pushed ~4 hours ago, git f060c42) switched video playback from mpv with explicit hardware decode → QtMultimedia (Qt6.8 FFmpeg backend) — but the new backend is doing 100% software decode of H.264.
The Pi 4's H.264 hardware decoder is /dev/video10 (bcm2835-codec-decode) accessed via the V4L2 mem2mem (v4l2m2m) API. The h264_v4l2m2m FFmpeg codec works perfectly from the command line:
[h264_v4l2m2m @ ...] Using device /dev/video10
[h264_v4l2m2m @ ...] driver 'bcm2835-codec' on card 'bcm2835-codec-decode'
But Qt6's FFmpeg multimedia backend doesn't automatically use v4l2m2m. Qt6 tries hardware acceleration in this order: VAAPI → DRM (v3d GPU) → software. The Pi 4's v3d GPU (renderD128) is for 3D rendering, not video decode — so Qt falls through to software. The old mpv path explicitly passed --hwdec=v4l2m2m which forced hardware decode.
The code comment in Anthias (media_player.py) even says "rpt1 packages carry --enable-v4l2-request/--enable-v4l2-m2m, so libavcodec engages Pi hardware decoders automatically" — but this is incorrect. Qt6's multimedia backend does NOT automatically pick up h264_v4l2m2m.
Description
The Anthias update (pushed ~4 hours ago, git f060c42) switched video playback from mpv with explicit hardware decode → QtMultimedia (Qt6.8 FFmpeg backend) — but the new backend is doing 100% software decode of H.264.
The Pi 4's H.264 hardware decoder is /dev/video10 (bcm2835-codec-decode) accessed via the V4L2 mem2mem (v4l2m2m) API. The h264_v4l2m2m FFmpeg codec works perfectly from the command line:
[h264_v4l2m2m @ ...] Using device /dev/video10
[h264_v4l2m2m @ ...] driver 'bcm2835-codec' on card 'bcm2835-codec-decode'
But Qt6's FFmpeg multimedia backend doesn't automatically use v4l2m2m. Qt6 tries hardware acceleration in this order: VAAPI → DRM (v3d GPU) → software. The Pi 4's v3d GPU (renderD128) is for 3D rendering, not video decode — so Qt falls through to software. The old mpv path explicitly passed --hwdec=v4l2m2m which forced hardware decode.
The code comment in Anthias (media_player.py) even says "rpt1 packages carry --enable-v4l2-request/--enable-v4l2-m2m, so libavcodec engages Pi hardware decoders automatically" — but this is incorrect. Qt6's multimedia backend does NOT automatically pick up h264_v4l2m2m.