Epic: #113 · Milestone: MC6 — Media engine
Why
The decoders in the stdlib are small (AAC 446 lines, MP3 624, Opus 430, Vorbis 439 — a conformant AAC-LC decoder alone is normally several thousand). The tests/ dirs exist (conformance_tests.zig, test_codecs.zig) but the plan must not assume they pass. Truth = public conformance corpora run every commit, with a per-stream pass ratchet, exactly like mvk-compiles.
Tasks
- Corpus: ITU-T H.264 JVT conformance (baseline/main/high subsets), HEVC JCT-VC conformance (Main/Main10, up to 4K), ISO AAC-LC/HE-AAC test vectors, MP3 (ISO layer-3 compliance set), FLAC test files, Opus test vectors, Vorbis; MP4/MKV/TS demux fixtures incl. edit lists, B-frames, VFR, multiple audio/subtitle tracks; SRT/ASS/VTT/PGS samples. Store hashes, fetch at CI time (licences permit test use).
- Harness in the compiler repo: decode → MD5 of YUV/PCM vs reference (or PSNR ≥ threshold for float decoders); JSON report;
scripts/codec-floor.jsonratchet in this repo. - Gap list → issues in
home-lang/homeper failing feature (e.g. CABAC 8×8, weighted prediction, SBR, LTP). - Performance floor: fps per core for 1080p H.264 High and HEVC Main on the ARM runner (or on the rig).
- Fuzzing seeds from the corpus (the compiler repo already has
packages/fuzz).
Acceptance
Report published in IMPLEMENTATION_STATUS.md as "codec conformance: H.264 N/M, HEVC N/M, …" and the ratchet never falls; v1 floor = 100 % of the streams needed for the reference clips in #88.