From 695588aaaf3d266a462778352c620094346cfab3 Mon Sep 17 00:00:00 2001 From: "Claude (noether)" Date: Sun, 17 May 2026 07:51:56 +0000 Subject: [PATCH] Phase 1 v3 amendment: Janet PROCEED with 2 plan-text fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Janet re-review verdict on v2: PROCEED with no architecture changes. Two minor plan-text amendments: A. cap_pool init for vpu981 — at backend init (NOT lazy). Three explicit init calls in VA_DRIVER_INIT_FUNC. Lazy init creates race window where concurrent VP8 (legacy hantro) and AV1 (vpu981) sessions can alias cap_pool state across the wrong device. B. Lock the F1 test vector: av1-1-b8-23-film_grain-50.ivf (AOM data set). Already used in Phase 0 kdirect; reuse via libva for byte- compare. Default 1080p encodes may be single-tile and never exercise F1; a named conformance vector locks the test surface. Cross-compile hazard documented: _Static_assert validates against COMPILE-TIME kernel headers. Sibling-campaign pattern is native arm64 build on ampere — no cross-compile in scope. Comment added near the assert for future Makefile changes. Phase 2 entry checklist locked. Plan stack: v1 → v2 (Q5 BLOCKER fix) → v3 amendment (Janet PROCEED + 2 fixes). Implementation starts with request.c third-device scaffolding (smallest atomic change), then small file edits, then NEW av1.h, then NEW av1.c (~700 LoC), then build + Phase 3 hardware test. Co-Authored-By: Claude Opus 4.7 --- phase1_plan_v3_amendment.md | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 phase1_plan_v3_amendment.md diff --git a/phase1_plan_v3_amendment.md b/phase1_plan_v3_amendment.md new file mode 100644 index 0000000..e714572 --- /dev/null +++ b/phase1_plan_v3_amendment.md @@ -0,0 +1,41 @@ +# Phase 1 plan v3 amendment — Janet PROCEED with 2 plan-text fixes + +Date: 2026-05-17 09:55. Janet re-review verdict on v2: **PROCEED** with 2 minor plan-text amendments. No architecture changes. + +## Amendment A: cap_pool init for vpu981 — at backend init, not lazy + +v2 said "cap_pool extension needs the same pair-of-flags layout". Implicit: pool state for the vpu981 fd must be set up at backend init time alongside rkvdec + legacy hantro, NOT lazily on first AV1 RequestCreateConfig. + +**Why**: lazy init creates a race window where a concurrent VP8 session (using legacy hantro fd) triggers cap_pool re-init on the legacy hantro device, while an AV1 session is mid-flight, can alias the pool state across the wrong device. Force init at backend open. + +Concretely in `VA_DRIVER_INIT_FUNC`: after the three `find_decoder_device_*` calls succeed, immediately call `cap_pool_init(driver_data, video_fd_rkvdec)`, `cap_pool_init(driver_data, video_fd_hantro)`, `cap_pool_init(driver_data, video_fd_vpu981)` — three explicit init calls, one per device fd, before returning success to libva. + +## Amendment B: lock the F1 test vector + +v2 said "Phase 3 verification must include multi-tile 1080p+ AV1". Janet flagged that a default-encoded 1080p might be single-tile and never exercise F1. + +**Specific test vector for F1**: `av1-1-b8-23-film_grain-50.ivf` from the AOM test data set — exercises film_grain (F3) AND tiling (F1) simultaneously. URL: `https://storage.googleapis.com/aom-test-data/av1-1-b8-23-film_grain-50.ivf`. + +Phase 0 already used this for kdirect verification (10/10 frames bit-perfect). Phase 3 reruns it via libva path and byte-compares. + +Additional multi-tile coverage: AOM test vector `av1-1-b8-22-svc-L2T1.ivf` (if exists) for layered/tiled stress, and any 1080p AV1 source encoded with `--tile-columns=2 --tile-rows=2`. + +## Cross-compile build-time hazard (Janet flagged for documentation only) + +The `_Static_assert(sizeof(struct v4l2_ctrl_av1_tile_group_entry) == 16, ...)` validates against kernel headers at COMPILE TIME. If the build moves cross-compile (e.g., builds on fresnel x86 against ampere arm64 kernel headers), the assert silently validates the wrong ABI. + +**Mitigation**: builds happen on ampere (native arm64) per sibling-campaign pattern. No cross-compile in this campaign. Add a comment near the assert flagging the hazard for any future Makefile changes. + +## Carry-forward verdict + +Janet PROCEED v2 → PROCEED with these two text amendments → Phase 2 code can open. + +## Phase 2 entry checklist + +- [ ] Plan v2 + v3 amendments committed and pushed (this commit) +- [ ] Start with `request.c` scaffolding (vpu981 fd slots + capability probe) — smallest atomic change, easy to verify +- [ ] Then `codec.c` + `config.c` + `picture.c` + `surface.h` (small edits, no new files) +- [ ] Then NEW `av1.h` (~30 LoC, minimal interface) +- [ ] Then NEW `av1.c` (~700 LoC — biggest single file, mirror Kwiboo + apply F1/F2/F3 corrections from v2) +- [ ] Then `Makefile.am` + autoreconf + native build on ampere +- [ ] Then Phase 3 hardware test starting with the existing 208×208 + 352×288 vectors (sanity), then `av1-1-b8-23-film_grain-50.ivf` (multi-tile F1 + film_grain F3 stress)