marfrit ad913dc14b iter1 phase5: second-model review (Plan/sonnet)
Plan subagent with model:sonnet reviewed Phase 0-4 with raw artifacts
(no curation per dev process). Two findings:

1. H.264 SSIM precedent framing — "mirrors fresnel iter1 exactly"
   overstates the cross-host link. Two independent empirical data
   points on two different rkvdec generations (RK3399 0.6431 vs
   RK3588 0.6676) that converge, not a cross-verified anchor.
   Reframe in iter1_close.md.

2. C7 deferral framing — "rig blocker" misframes a deliberate
   scope boundary (headless-ssh by design) as a rig deficit.
   Reframe in iter1_close.md.

Both findings are pure framing changes (no code/data/struct claim),
so no test-verify gate. Per empirical-over-theoretical guardrail,
adoption is direct.

Reviewer also confirmed the codec fragmentation rationale and
kernel-agent-vs-backend issue assignment as correct (no cross-codec
coupling problem).

Plan sound, proceed to Phase 6 with the two amendments applied.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 07:26:30 +00:00
2026-05-16 07:20:23 +00:00

ampere-fourier

TL;DR

Peer campaign to fresnel-fourier and libva-multiplanar, targeting ampere (CoolPi CM5 GenBook / Rockchip RK3588) — the third Rockchip generation the libva-v4l2-request-fourier backend gets exercised against (after ohm's RK3568 and fresnel's RK3399). Goal: make libva-v4l2-request-fourier deliver HW decode on RK3588 for every codec the SoC actually exposes via mainline V4L2 stateless.

Hardware target

Property Value
Board CoolPi CM5 GenBook (coolpi,pi-cm5-genbook / coolpi,pi-cm5 / rockchip,rk3588)
SoC Rockchip RK3588 (4× Cortex-A76 + 4× Cortex-A55, Mali-G610)
Decoder block 1 rkvdec (/dev/media0, /dev/video1) — H.264 + HEVC (mainline rockchip_vdec driver)
Decoder block 2 hantro-vpu as rockchip,rk3568-vpu-dec (/dev/media1, /dev/video2) — H.264 + MPEG-2 + VP8 (generic hantro mainline)
Decoder block 3 hantro-vpu as rockchip,rk3588-av1-vpu-dec (/dev/media3, /dev/video4) — AV1 dedicated decoder
Encoder block hantro-vpu as rockchip,rk3588-vepu121-enc (/dev/media2, /dev/video3) — out of scope
RGA rockchip-rga (/dev/video0) — 2D blit, out of scope
Kernel linux-ampere-fourier 7.0rc3.kafr1-1 (vanilla torvalds v7.0-rc3 + ampere DTS / board patches only; no fourier codec patches)
Boot stack extlinux entry arch_mainlineImage-7.0.0-rc3-ARCH+ + rk3588-coolpi-cm5-genbook.dtb-7.0.0-rc3-ARCH+

The decode surface is broader than fresnel's: three independent decoder cores (rkvdec + hantro-vpu + av1-vpu-dec) vs fresnel's two (rkvdec + hantro-vpu). The hantro-vpu binding here is a generic rockchip,rk3568-vpu-dec (not an RK3588-specific compatible) — kernel handles it via the rk3568 binding chain.

Mali-G610 (panfrost / panthor) is a different generation than fresnel's T860 and ohm's G52 — kwin / mesa / panfrost regressions or wins do not transfer.

Scope (LOCKED 2026-05-16 in phase0_findings.md)

In scope:

  • libva-v4l2-request-fourier backend exercised on ampere V4L2 decode nodes (rkvdec + hantro-vpu + av1-vpu-dec).
  • Codecs: everything the kernel V4L2 surface exposes — confirmed via v4l2-ctl --list-formats-out:
    • H.264 (S264) — rkvdec OR hantro
    • HEVC (S265) — rkvdec only
    • MPEG-2 (MG2S) — hantro only
    • VP8 (VP8F) — hantro only
    • AV1 (AV1F) — av1-vpu-dec only
  • Consumers: vainfo, ffmpeg -hwaccel vaapi, mpv --hwdec=v4l2request-copy, firefox-fourier (with vendor-default prefs from marfrit-packages#8).

Out of scope:

  • VP9 on RK3588 rkvdec — kernel does not expose V4L2_PIX_FMT_VP9_FRAME on this device in mainline v7.0-rc3. Enabling it is a kernel-agent experiment (separate campaign / issue), not part of the ampere baseline.
  • AV1 encoder, JPEG encoder, RGA — not decode work.
  • Codec-side patches to linux-ampere-fourier — per user policy (2026-05-16), ampere stays on a clean mainline + board-DTS kernel. Anything else gets routed through kernel-agent as an experiment (separate branch / target), not the baseline package.

Process

8(+1) phase loop per feedback_dev_process.md. Phase 0 substrate in phase0_findings.md. Phase 5 review uses the sonnet-architect subagent pattern (Plan with model: sonnet).

Predecessor data carryover: fresnel-fourier reached iter38 close with the same backend (libva-v4l2-request-fourier @ 7ac934e, "iter38b"). Per feedback_dev_process.md Phase 0 rules, fresnel's per-codec FPS / bit-exactness numbers carry as reference history only; ampere binding cells anchor to in-session measurements on RK3588 hardware.

Predecessor work this campaign builds on

  • ../fresnel-fourier/ — RK3399 peer campaign, closed iter38 at e66c5c0. Backend fork tip 7ac934e. The libva backend, mpv-fourier, ffmpeg-v4l2-request-fourier, firefox-fourier packages all consumed unmodified on ampere.
  • ../libva-multiplanar/libva-v4l2-request-fourier/ — the backend fork itself.
  • marfrit/kernel-agent — issue #6 filed 2026-05-15 (bootstrap-missing + asks). Bootstrap part landed via PRs #8/#9/#10 on 2026-05-16, producing linux-ampere-fourier 7.0rc3.kafr1-1. Asks #2 (VP9) and #3 (AV1 integration) reframed as experiments per user policy — separate kernel-agent issues to follow.
  • marfrit/marfrit-packages issue #17 — libva-v4l2-request-fourier CI build pkgrel=1 produces broken HEVC binary. ampere worked around by hand-rebuilding from source (md5 0c9a7efa…, 485 KB) over the packaged binary. Same workaround as fresnel until #17 is fixed.

Operator-facing repo URL

git.reauktion.de/marfrit/ampere-fourier — to be created during the first iteration if there's something publish-worthy. For now this repo lives only at ~/src/ampere-fourier on noether.

Non-upstreaming default

Inherited from libva-multiplanar / feedback_no_upstream.md. Patches must be aligned to upstream in syntax and semantics; PR / MR / bug-report only on explicit operator instruction. The exception is marfrit/kernel-agent experiments, which exist precisely to track candidate upstream patches in a controlled fleet-rollout pipeline.

Build infrastructure

ampere is itself a kernel-agent aarch64 build host (secondary, per kernel-agent README) — 8-core RK3588 + 32 GB RAM. For libva backend / mpv / ffmpeg builds the campaign uses ampere directly (small projects, hand-build is faster than packaging detour). For experimental kernel builds, kernel-agent dispatches to boltzmann (primary aarch64) or ampere (fallback).

S
Description
ampere (CoolPi CM5 GenBook / RK3588) campaign tracking HW video decode via libva-v4l2-request-fourier — peer to marfrit/fresnel-fourier and marfrit/libva-multiplanar.
Readme 76 KiB
Languages
Shell 100%