fix(build): ship +rpt1 ffmpeg on pi3-64 so H.264 uses HW decode#3110
Conversation
- pi3-64 was omitted from the _rpt1-ffmpeg-pin.j2 board gate, so it shipped stock Debian ffmpeg (no v4l2_request/SAND/vout-drm) while its sibling pi4-64 got the Pi-patched +rpt1 build - consequence: QtMultimedia can't engage the VideoCore IV bcm2835 H.264 decoder and falls back to software; SW can't sustain 1080p30 on the Pi 3 (measured 0.74x realtime) and drops frames / stalls presentation under load (issue #3084) - the gate (#2885) predates the pi3-64 board (#2985), which was grouped with pi4-64 everywhere else; add pi3-64 here too - verified via rendered Dockerfiles: pi3-64/pi4-64/pi5/arm64 now carry the +rpt1 pin; x86 and the Qt5 boards (pi2/pi3) stay on stock Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR updates the Docker build templating so the pi3-64 board receives the Raspberry Pi–patched +rpt1 ffmpeg/libav* packages, enabling QtMultimedia to use hardware H.264 decode instead of falling back to software decode.
Changes:
- Add
pi3-64to the_rpt1-ffmpeg-pin.j2board gate so it pins to the Raspberry Pi+rpt1ffmpeg build. - Add explanatory in-file commentary documenting why
pi3-64needs this pin (performance / HW decode path context).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Validated on real Pi 3 Model B+ hardware ✅Built this branch's Then played the same 1080p H.264 clip on the stock release image vs this fix:
So H.264 decode moves off the CPU onto the VideoCore IV and now sustains 1080p30 at zero decode drops — which is the resource-pressure mechanism behind the #3084 blank/frozen video on hot, RAM-starved devices. Out of scope / unchanged: the presented frame rate is still capped at ~10 fps by the separate Qt6 RHI presentation-pacing bottleneck (#2967-era) — that's a distinct issue from decode and not addressed here. |
Copilot review: the Pi 3-64 comment implied the HW-decode path is v4l2_request/DRM. It's actually the stateful bcm2835-codec V4L2 M2M decoder (h264_v4l2m2m). Reword to say so and anchor to the on-device result (stock=SW, +rpt1=/dev/video10). Comment-only; gate unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|



Issues Fixed
Addresses the video-decode/performance half of #3084 (pi3-64 video black / stalling).
Description
pi3-64 was missing from the board gate in
docker/_rpt1-ffmpeg-pin.j2, so it shipped stock Debian ffmpeg while its siblingpi4-64got the Raspberry Pi–patched+rpt1build (--enable-v4l2-request --enable-sand --enable-vout-drm). Without+rpt1, QtMultimedia can't engage the VideoCore IVbcm2835-codecH.264 decoder and silently falls back to software decode.The gate was introduced in #2885 (
pi4-64, pi5, arm64); the pi3-64 board was added later in #2985 and grouped with pi4-64 everywhere else (eglfs/Qt6, the video path, "shares this exact path") — this gate was just missed. One-line fix: addpi3-64to the tuple.Diagnosed live on a real Pi 3 Model B+ running the
2026.07.0(latest-pi3-64) release:h264(what ships today)h264_v4l2m2m(hardware, standalone)The hardware decodes H.264 fine; the viewer just never reaches it. During playback
AnthiasViewerholds only/dev/dri/card0— never/dev/video10— with zero dmesg/CMA activity, confirming pure SW decode. SW can't sustain 1080p30 on the Pi 3, so frames drop (~25% at 1080p) and, under thermal + memory pressure, presentation stalls toward zero fps — the likely driver of the reporter's black/frozen video in issue #3084. Offloading to HW (near-zero CPU) removes that pressure.Confirmed the fix and its blast radius on the rendered Dockerfiles:
+rpt1pin after this changeNote: this ships in freshly-flashed images only on the next release;
latest-pi3-64upgrade users get it on the next master build. The stale "Included by BOTH … Dockerfile.server.j2" comment in the template is a separate pre-existing matter (only the viewer template currently includes the pin) and is left untouched here.Checklist
🤖 Generated with Claude Code