Files
fresnel-fourier/phase6_iter5b_implementation.md
T
marfrit 550bb81a3e iter5b Phase 6: 3 commits A+B+C landed clean, backend installed on fresnel
Fork tip 4b2288f. Backend SHA256 d7722da742bfcb86a9136b07e6d9a5de23668f37fcad328258966c5338265e82
on /usr/lib/dri/v4l2_request_drv_video.so (pre-iter5b was 6e90b7a9b2c33480...).

LOC: 188 across 5 modified files + 2 new (codec.h, codec.c). All 4
Phase 5 amendments (CRIT-1 + 3 IMPs) incorporated in the actual
commits, no follow-ups needed.

Phase 7 sweep ready: re-run /tmp/iter5_p3/sweep.sh on fresnel; expect
libva == kdirect == sw for HEVC + VP9 + VP8 (3 codecs unblocked);
MPEG-2 unchanged; H.264 unchanged (Bug 4 deferred to iter6).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 09:41:04 +00:00

4.8 KiB

Iteration 5b — Phase 6 (implementation)

Commits A + B + C landed on fork master 2026-05-12. All built clean on fresnel linux-fresnel-fourier 7.0-1 (libva 1.23, ninja 1.13.2, gcc 15.2.1). No fix-forward needed.

Commits

SHA Files LOC Summary
ce304ef (A) src/codec.h (new) · src/codec.c (new) · src/meson.build +102 / -2 NEW codec.h/codec.c — pixelformat_for_profile() helper mapping VAProfile → V4L2 OUTPUT FOURCC. Register in meson.build sources + headers.
f8256e6 (B) src/request.h · src/config.c +24 request.h: last_output_pixelformat field on struct request_data. config.c: wire up dead object_config->pixelformat at CreateConfig via the helper. IMP-2 amendment.
4b2288f (C) src/surface.c +78 / -11 NEW find_sole_active_pixelformat() static helper (CRIT-1-corrected: int iter per request.c:411-418 pattern). Replace surface.c:173 hardcode with helper call. Extend gate to fire on pixelformat change. Comment updated to mention "codec change" alongside resolution (IMP-1).

Total: 3 commits, 188 LOC delta, 5 files modified + 2 NEW.

Fork tip: 4b2288f. Backend installed SHA256 d7722da742bfcb86a9136b07e6d9a5de23668f37fcad328258966c5338265e82 (pre-iter5b was 6e90b7a9b2c33480…).

Phase 5 amendments incorporated

ID Amendment Where landed
CRIT-1 iterator type int (not struct object_heap_iterator); cast-on-return pattern surface.c::find_sole_active_pixelformat, mirrors request.c:411-418
IMP-1 Gate comment mentions codec/profile change alongside resolution surface.c:178-200 updated comment block
IMP-2 Wire object_config->pixelformat at CreateConfig; helper returns FOURCC directly config.c::RequestCreateConfig populates field; find_sole_active_pixelformat returns config_object->pixelformat directly (one fewer indirection)
IMP-3 Commit message precision (hantro substitution to MPEG2_DECODER) Commit C message body uses precise framing

All 4 Phase 5 amendments incorporated in the actual commits, no follow-up edits needed.

Phase 1 criteria status (post-Phase-6, pre-Phase-7)

# Criterion Build-time signal Empirical signal
1 HEVC + VP9 + VP8 libva == kdirect == sw Backend built clean; new SHA installed Pending Phase 7 sweep
2 MPEG-2 unchanged hantro path's MPEG2_SLICE mapping unchanged (helper returns MPEG2_SLICE for both VAProfileMPEG2Simple + Main) Pending Phase 7 sweep
3 H.264 keyframe still decodes H264_SLICE mapping preserved Pending Phase 7 sweep
4 Control-payload anchors hold No code touching control-handling Pending Phase 7 strace anchor diff

Build inputs verified

  • pixelformat_for_profile() symbol resolved: gcc compiled surface.c::find_sole_active_pixelformat without missing-symbol errors → codec.h #include chain correct.
  • config.h included in surface.c — struct object_config access works → no missing-type errors at compile.
  • int iter pattern: ninja build succeeded → no implicit-int-conversion warning, no struct-undefined error.
  • last_output_pixelformat field added to struct request_data: ninja compiled request.c et al. cleanly → no field-already-exists / type-mismatch errors.

Build environment

Linux fresnel 7.0.0-fresnel-fourier #1 SMP PREEMPT Sat May  9 19:24:42 CEST 2026 aarch64
libva 1.23 / meson 1.x / ninja 1.13.2 / gcc 15.2.1
fork tip: 4b2288f
backend SHA256: d7722da742bfcb86a9136b07e6d9a5de23668f37fcad328258966c5338265e82

Phase 7 readiness

The Phase 4 plan's C7 verification matrix is ready to run. Phase 3 sweep script preserved on fresnel at /tmp/iter5_p3/sweep.sh and in iter5_phase3_baseline.tgz. Expected post-fix hash matrix:

Codec Pre-fix libva Expected post-fix libva kdirect (anchor)
H.264 1080p30 71ac099b… (keyframe partial) unchanged — Bug 4 deferred 1e7a0bc9…
HEVC 720p 06b2c5a0… (all-zero) 9340b832… 9340b832…
VP9 720p 06b2c5a0… (all-zero) 4f1565e8… 4f1565e8…
MPEG-2 720p 19eefbf4… (worked) 19eefbf4… (unchanged) 19eefbf4…
VP8 720p 06b2c5a0… (all-zero) 136ce5cb… 136ce5cb…

Phase 7 binary checks: cmp -s libva_<codec>.yuv kdirect_<codec>.yuv for each of {hevc, vp9, vp8}. 3 of 3 must pass. MPEG-2 + H.264 cmp-against-prior-Phase-3-anchor must hold (no regression).

Substrate state at Phase 6 close

  • Fork tip 4b2288f on noether + fresnel + gitea (push via claude-noether@git.reauktion.de SSH).
  • Backend installed at /usr/lib/dri/v4l2_request_drv_video.so SHA256 d7722da742bfcb86a9136b07e6d9a5de23668f37fcad328258966c5338265e82.
  • Kernel: linux-fresnel-fourier 7.0-1 (unchanged; no kernel work in iter5b).
  • Test fixtures unchanged.
  • Phase 7 sweep ready to execute.