From 81cc050bf3560a8deef1524a1ffd66b5a32bc8f9 Mon Sep 17 00:00:00 2001 From: "Claude (noether)" Date: Fri, 15 May 2026 06:08:21 +0000 Subject: [PATCH 1/2] libva-v4l2-request-fourier: bump pin iter8 -> iter38b (7ac934e) Carries the fork from libva-multiplanar iter8 close (2026-05-06) to fresnel-fourier iter38b (2026-05-14): multi-device probe so a single libva session serves rkvdec (H.264 + HEVC + VP9) + hantro (MPEG-2 + VP8) without LIBVA_V4L2_REQUEST_VIDEO_PATH overrides, plus the MAX_PROFILES bounds-check fix from iter38b. Required by the fresnel-fourier README's HW-decode stack (vainfo exposes all 10 profiles in one session, byte-exact bench verified across 5 codecs). 68 commits between the old pin (65969da3) and the new (7ac934e0). pkgver() recomputes the rev count at build time; the static placeholder is bumped from r280 to r348 to reflect the new pin. --- arch/libva-v4l2-request-fourier/PKGBUILD | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/arch/libva-v4l2-request-fourier/PKGBUILD b/arch/libva-v4l2-request-fourier/PKGBUILD index 6af827603..68ee37139 100644 --- a/arch/libva-v4l2-request-fourier/PKGBUILD +++ b/arch/libva-v4l2-request-fourier/PKGBUILD @@ -6,8 +6,11 @@ # tracks the campaign fork's git history directly, so iteration sweeps # (DEBUG removal, follow-up bugfixes) land in a clean linear log. # -# Campaign: ~/src/libva-multiplanar/ (eight closed iterations as of -# 2026-05-06; iter8 close is the production tip pinned below). +# Campaign: ~/src/libva-multiplanar/ (iter8 close 2026-05-06) plus +# ~/src/fresnel-fourier/ which carried the fork to iter38b — multi-device +# probe so a single libva session serves all 5 codecs (rkvdec H.264 + +# HEVC + VP9, hantro MPEG-2 + VP8) plus a bounds-check fix for +# MAX_PROFILES. Pinned below. # Fork repo: https://git.reauktion.de/marfrit/libva-v4l2-request-fourier # Bootlin upstream: https://github.com/bootlin/libva-v4l2-request # @@ -20,16 +23,19 @@ pkgname=libva-v4l2-request-fourier _upstreampkg=libva-v4l2-request -# Pin the fork tip. 65969da = "iter8 Phase 4: tests/run_perf_binding_cell.sh" -# — last commit on master before fresnel-fourier work started layering -# MPEG-2 rewrites on top of it (2026-05-08). The libva-multiplanar campaign -# closed iter8 at this commit; promote to a later pin only after a future -# iteration closes cleanly. -_commit=65969da3ee901442a8ca4e1f7f9697d5461d368a +# Pin the fork tip. 7ac934e = "iter38b: bounds check uses MAX_PROFILES +# (11), not MAX_CONFIG_ATTRIBUTES (10)" — fresnel-fourier campaign +# production tip 2026-05-14, sibling iter38 added multi-device probe so +# a single libva session serves rkvdec + hantro without requiring +# LIBVA_V4L2_REQUEST_VIDEO_PATH overrides. Promote to a later pin only +# after a future iteration closes cleanly. +_commit=7ac934e0c5420814c7a5fc3e2a2f08251d590d9e # Project version from meson.build (1.0.0) + commit count + short sha, -# matching the ffmpeg-v4l2-request-fourier convention. -pkgver=1.0.0.r280.65969da +# matching the ffmpeg-v4l2-request-fourier convention. Recomputed at +# build time by pkgver() below; the static value here is a placeholder +# so AUR-style consumers see something coherent before src/ exists. +pkgver=1.0.0.r348.7ac934e pkgrel=1 pkgdesc="VA-API backend for V4L2 stateless decoders (multiplanar fork — fourier umbrella)" arch=('aarch64') From 62a594ab596f80594047e6951f9cb9af13881240 Mon Sep 17 00:00:00 2001 From: "Claude (noether)" Date: Fri, 15 May 2026 06:10:01 +0000 Subject: [PATCH 2/2] firefox-fourier: ship RK3399 HW-decode default prefs (closes #8) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three prefs that gate the patched VAAPI / V4L2-request code path are 'false' upstream and need to be 'true' for the libva-v4l2-request backend to actually engage on RK3399 / panfrost EGL: widget.dmabuf.force-enabled media.hardware-video-decoding.force-enabled media.ffvpx-hw.enabled Without them, Gecko's DMA-BUF probe silently fails (panfrost EGL doesn't trip the right detection), the (Intel-tuned) HW-vs-SW cost heuristic picks SW, and the FFvpx PDM never selects its HW-capable variant for VP8/VP9. Net result: fresh profiles SW-decode despite the 0001..0004 unlock patches being applied. Shipped as a vendor-default file at: /usr/lib/firefox-fourier/browser/defaults/preferences/rockchip-fourier-defaults.js Lower precedence than user.js / about:config — power users debugging HW decode can still flip them off without touching the package. pkgrel 1 -> 2. Closes: #8 --- arch/firefox-fourier/PKGBUILD | 15 +++++++++++++-- .../rockchip-fourier-defaults.js | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 arch/firefox-fourier/rockchip-fourier-defaults.js diff --git a/arch/firefox-fourier/PKGBUILD b/arch/firefox-fourier/PKGBUILD index ff9ea480b..dfa4e0b3a 100644 --- a/arch/firefox-fourier/PKGBUILD +++ b/arch/firefox-fourier/PKGBUILD @@ -13,7 +13,7 @@ pkgname=firefox-fourier pkgver=150.0.1 -pkgrel=1 +pkgrel=2 pkgdesc='Firefox with V4L2 stateless HW video decode unlocked for mainline Linux Rockchip' arch=('aarch64' 'x86_64') url='https://www.mozilla.org/firefox' @@ -87,8 +87,11 @@ source=( '0002-libwrapper-hwdevice-ctx-create.patch' '0003-ffmpegvideo-v4l2-request-route.patch' '0004-prefs-v4l2-request.patch' + # Vendor-default prefs that gate the patched VAAPI path on RK3399 — + # widget.dmabuf.force-enabled etc. See marfrit-packages#8 for evidence. + 'rockchip-fourier-defaults.js' ) -sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP') +sha256sums=('SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP') prepare() { cd "${srcdir}/firefox-${pkgver}" @@ -160,4 +163,12 @@ export MOZ_X11_EGL="${MOZ_X11_EGL:-1}" exec /usr/lib/firefox-fourier/firefox-fourier "$@" LAUNCHER chmod 0755 "${pkgdir}/usr/bin/firefox-fourier" + + # Vendor-default prefs (RK3399 HW-decode unlock) — closes #8. + # Lower precedence than user prefs / about:config; loaded by Firefox + # at startup from the package install dir. The 0004 patch covers + # media.ffmpeg.v4l2-request.enabled; this file covers the three + # additional prefs that gate the path to the patched code. + install -Dm644 "${srcdir}/rockchip-fourier-defaults.js" \ + "${pkgdir}/usr/lib/firefox-fourier/browser/defaults/preferences/rockchip-fourier-defaults.js" } diff --git a/arch/firefox-fourier/rockchip-fourier-defaults.js b/arch/firefox-fourier/rockchip-fourier-defaults.js new file mode 100644 index 000000000..3226311a0 --- /dev/null +++ b/arch/firefox-fourier/rockchip-fourier-defaults.js @@ -0,0 +1,19 @@ +// firefox-fourier — RK3399 V4L2-stateless HW-decode default prefs. +// +// The patch series (0001..0004) builds the VAAPI / V4L2-request routing +// path through libavcodec, but the resulting code path is gated by three +// other prefs that are 'false' upstream because the relevant probes don't +// fire on panfrost EGL or trip the Intel-tuned cost heuristic. Without +// these, firefox-fourier silently SW-decodes on a fresh profile despite +// having all the unlock patches applied. +// +// Filed via marfrit/marfrit-packages#8 — see that issue for MOZ_LOG +// evidence on fresnel (Pinebook Pro / RK3399). +// +// These are *vendor* defaults: lower precedence than user.js and +// about:config user prefs. Power users who want to disable HW decode for +// debugging can flip them in user prefs without touching this file. + +pref("widget.dmabuf.force-enabled", true); +pref("media.hardware-video-decoding.force-enabled", true); +pref("media.ffvpx-hw.enabled", true);