Table of Contents
fourier — multi-layer V4L2 hardware-decode unlock for mainline ARM Wayland
A patch campaign that started as a single Chromium V4L2 dispatch unlock and expanded — every time a layer was patched, the next layer's bug surfaced — into 4 sibling patch series + 1 kernel RFC + 3 upstream submission drafts that together make hardware video decode actually work on mainline-Linux Wayland on Rockchip + Mali-class ARM hardware.
- Public face: github.com/marfrit/fourier — sibling subdirs
chromium-fourier/,qt6-base-fourier/,kwin-fourier/,docs/,tools/ - Local Arch packaging + investigation notes: gitea/marfrit-packages under
arch/{chromium,qt6-base,kwin,firefox}-fourier/,kernel/vb2-dma-resv-rfc/,upstream-submissions/ - Reference target: ohm (PineTab2 / RK3566 / Mali-G52 / panfrost / mainline 6.19.10 / KDE Plasma 6.6.4 Wayland)
Status — paused 2026-04-30
Project paused pending the GL/EGL pipeline campaign baseline. The browser-side ship-gate (1080p30 YouTube ≤ 30 % CPU, no drops) is gated on the Mali-side EGLImage import cost being addressed; running browser measurements before that lands produces known-failing results that contaminate the 8-phase loop.
Freeze-state record: Phase 5 review handover, 2026-04-30.
Live tasks that continue independently:
- chromium-fourier build — finish the build + publish; package ships, measurement deferred.
- vb2 dma_resv RFC v2 — kernel-side, separate cadence.
Re-entry condition: GL fix campaign surfaces something useful that changes the GL-consumer baseline.
Status snapshot — 2026-04-30
| Series | Patches | State | Validated where | Notes |
|---|---|---|---|---|
| chromium-fourier | 4 | end-to-end smooth playback | ohm | bbb_1080p30_h264.mp4: ~81 % chrome CPU vs ~131 % pre-patch baseline (~3.8× reduction) |
| qt6-base-fourier | 3 | shipped + upstream-targetable | ohm + fresnel | pure spec-correctness GLES3 fix; zero GL_INVALID_VALUE in journal post-relogin |
| kwin-fourier | 1 shipped (0001-skip-wait) | shipped, MR 9157 closed | ohm | reverted to 0001 after MR review found 0002 technically wrong; goes no-op once vb2-dma-resv RFC lands |
| vb2-dma-resv RFC | 3 sent 2026-04-29 | v1 reviewed (Nicolas + Christian); v2 sketch backlogged | — | not a NACK; attach point moves to device_run, opt-in flag added, lockdep annotated for v2 |
| firefox-fourier 150.0.1 | 4 | partial — gates 1+4 verified, 2+3 corrected today, rebuild pending | fresnel | root cause identified via MOZ_LOG: must probe by h264_v4l2request codec name first |
| upstream submission drafts | 3 | written, awaiting validation gates | — | bugreports.qt.io, invent.kde.org MR, linux-media RFC |
Sub-pages
- chromium-fourier — what we get + the rug-pull on Brave (2026-04-26 capture; predates the 4-patch end-to-end win)
Sources
Public
-
chromium-fourier/— 4 patchesqt6-base-fourier/— 3 patcheskwin-fourier/— 2 patchesdocs/dmabuf-zero-copy.md— panfrostexternal_onlyfinding + cascadetools/— capture / measurement helpers
Local (gitea/marfrit-packages)
arch/chromium-fourier/— PKGBUILD + patches +NEXT.mdcampaign chronology +KWIN_PIVOT.mddiscovery storyarch/qt6-base-fourier/arch/kwin-fourier/arch/firefox-fourier/kernel/vb2-dma-resv-rfc/— 3-patch kernel RFCupstream-submissions/qt6-base-fourier/qt-bug-report.mdupstream-submissions/kwin-fourier/kde-mr-body.mdupstream-submissions/vb2-dma-resv/lkml-submission-notes.md
Page index created 2026-04-28 from a fourier-campaign sync. The
chromium-fourier sub-page predates the end-to-end win and reflects the
state on 2026-04-26; the patch_series page
carries the current 4-patch shape.
