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>
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 compiledsurface.c::find_sole_active_pixelformatwithout missing-symbol errors → codec.h #include chain correct.config.hincluded in surface.c —struct object_configaccess works → no missing-type errors at compile.int iterpattern: ninja build succeeded → no implicit-int-conversion warning, no struct-undefined error.last_output_pixelformatfield added tostruct 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
4b2288fon noether + fresnel + gitea (push viaclaude-noether@git.reauktion.deSSH). - Backend installed at
/usr/lib/dri/v4l2_request_drv_video.soSHA256d7722da742bfcb86a9136b07e6d9a5de23668f37fcad328258966c5338265e82. - Kernel:
linux-fresnel-fourier 7.0-1(unchanged; no kernel work in iter5b). - Test fixtures unchanged.
- Phase 7 sweep ready to execute.